Apache spark 火花卡桑德拉连接器问题使用目录

Apache spark 火花卡桑德拉连接器问题使用目录,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我按照指示连接spark程序,从Cassandra读取数据。以下是我如何配置spark的: val configBuilder = SparkSession.builder .config("spark.sql.extensions", "com.datastax.spark.connector.CassandraSparkExtensions") .config("spark.cassandra.connection.host", cassandraUrl) .config("sp

我按照指示连接spark程序,从Cassandra读取数据。以下是我如何配置spark的:

val configBuilder = SparkSession.builder
  .config("spark.sql.extensions", "com.datastax.spark.connector.CassandraSparkExtensions")
  .config("spark.cassandra.connection.host", cassandraUrl)
  .config("spark.cassandra.connection.port", 9042)
  .config("spark.sql.catalog.myCatalogName", "com.datastax.spark.connector.datasource.CassandraCatalog")
根据文档,完成后,我应该能够像这样查询Cassandra:

spark.sql(“从myCatalogName.myKeyspace.myTable中选择*,其中myPartitionKey=something”)

但是,当我这样做时,会收到以下错误消息:

mismatched input '.' expecting <EOF>(line 1, pos 43)

== SQL ==
select * from myCatalog.myKeyspace.myTable where myPartitionKey = something
----------------------------------^^^
输入不匹配。“”应为(第1行,位置43)
==SQL==
从myCatalog.myKeyspace.myTable中选择*,其中myPartitionKey=something
----------------------------------^^^
当我尝试以下格式时,我成功地从Cassandra检索条目:

val frame = spark
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map("keyspace" -> "myKeyspace", "table" -> "myTable"))
  .load()
  .filter(col("timestamp") > startDate && col("timestamp") < endDate)
val frame=spark
阅读
.format(“org.apache.spark.sql.cassandra”)
.选项(映射(“键空间”->“我的键空间”,“表”->“我的表”))
.load()
.filter(col(“timestamp”)>startDate&&col(“timestamp”)
但是,此查询需要执行完整的表扫描。该表包含数百万个条目,我更愿意使用谓词下推功能,它似乎只能通过SQLAPI使用

我使用的是spark-core_2.11:2.4.3、spark-cassandra-connector_2.11:2.5.0和cassandra 3.11.6


谢谢

Catalogs API仅在尚未发布的SCC 3.0版中可用。它将与Spark 3.0版本一起发布,因此在SCC 2.5.0中不可用。因此,对于2.5.0,您需要使用
创建或替换临时视图…
显式注册表,如下所示:

spark.sql(““”创建临时视图myTable
使用org.apache.spark.sql.cassandra
选择权(
表“myTable”,
密钥空间“myKeyspace”,
下推“true”)“”)
关于下推(对于所有DataFrameAPI、SQL、Scala、Python等,它们的工作方式都是相同的)-当
timestamp
是第一个集群列时,就会发生这种过滤。即使在这种情况下,典型的问题是您可能会将
startDate
endDate
指定为字符串,而不是时间戳。您可以通过执行
frame.explain
,并检查谓词是否被按下进行检查-谓词名称附近应该有
*
标记

比如说,

val data=spark.read.cassandraFormat(“sdtest”,“test”).load()

val FILTED=data.filter(“ts>=cast('2019-03-10T14:41:34.373+0000'作为时间戳))ts='2019-03-10T14:41:34.373+0000'和ts您使用的是什么版本的DataStax Spark Cassandra Connector?@Srinivas 2.5.0,我要在问题中补充一点,配置在HowTo中看起来不同。@SašaZejnilović在Spark中设置配置属性有许多不同的方法,在文档中它们声明所有配置都是相同的:
要设置目录,请将以下配置放入SparkSession配置(或任何其他Spark配置文件或对象)中
@Jewels我的意思是你的conf路径看起来不一样。太棒了!这就是有效的方法。Alex我在哪里可以找到当前可用版本的文档?你可以使用这个答案中的链接-它指向
b2.5
分支…3.0版本也是如此,发布的文档位于
b3.0
,因为
master
可能包含一些尚未发布的内容。