如何从Cassandra表中加载行作为Spark中的Dataframe?

时间:2017-09-28 10:18:29

标签: scala apache-spark cassandra spark-cassandra-connector

我可以将整个Cassandra表加载为数据帧,如下所示

val tableDf = sparkSession.read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> table, "keyspace" -> keyspace))
      .load()

但是我找不到通过主键获取行的方法,比如

select * from table where key = ''

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:6)

val tableDf = sparkSession.read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> table, "keyspace" -> keyspace))
      .load()
      .filter("key='YOUR_KEY'")

使用此spark-cassandra-connector将使用谓词下推并仅获取所需数据。

Dataframes and Predicate pushdown

答案 1 :(得分:0)

Java的相同方式是:

SparkSession sparkSession = SparkSession.builder().appName("Spark Sql Job").master("local[*]")
                .config("spark.sql.warehouse.dir", "file:///c:/tmp/spark-warehouse")
                .config("spark.cassandra.connection.host", "localhost")
                .config("spark.cassandra.connection.port", "9042").getOrCreate();
        SQLContext sqlCtx = sparkSession.sqlContext();
        Dataset<Row> rowsDataset = sqlCtx.read().format("org.apache.spark.sql.cassandra").option("keyspace", "myschema")
                .option("table", "mytable").load();
        rowsDataset.show();

我认为scala应该是相同的