如何使用PySpark,SparkSQL和Cassandra?

时间:2016-02-28 16:06:27

标签: apache-spark cassandra pyspark pyspark-sql

我对这个故事中的不同演员有点困惑:PySpark,SparkSQL,Cassandra和pyspark-cassandra连接器。

据我所知,Spark发展了很多,SparkSQL现在是一个关键组件(使用'数据帧')。显然,没有SparkSQL就没有理由工作,特别是如果连接到Cassandra。

所以我的问题是:需要哪些组件以及如何以最简单的方式将它们连接在一起?

在Scala中使用boolean similarLeft; if(treeStructOne.hasLeft() && treeStructTwo.hasLeft()) { similarLeft = similar(treeStructOne.getLeft(),treeStructTwo.getLeft()); } else { similarLeft = ?; // TODO what is good condition here? } 我可以做到

return similarLeft && similarRight;

然后

boolean similar(TreeStruct x, TreeStruct y) {
    if (x == null) {
        return y == null;
    } else {
        return y != null && similar(x.left, y.left) && similar(x.right, y.right);
    }
}

如何使用spark-shell

执行此操作

以下是我收集的一些子问题以及部分答案(如果我错了,请更正)。

  • 是否需要pyspark-casmandra(我不这么认为 - 我不知道首先是在做什么)

  • 我是否需要使用./bin/spark-shell --jars spark-cassandra-connector-java-assembly-1.6.0-M1-SNAPSHOT.jar 或者我可以使用常规import org.apache.spark.sql.cassandra.CassandraSQLContext val cc = new CassandraSQLContext(sc) cc.setKeyspace("mykeyspace") val dataframe = cc.sql("SELECT count(*) FROM mytable group by beamstamp") 并自行导入必要的内容吗?

2 个答案:

答案 0 :(得分:3)

应按照Spark Cassandra Connector python docs中所述的spark-cassandra-connector包启动Pyspark。

./bin/pyspark 
  --packages com.datastax.spark:spark-cassandra-connector_$SPARK_SCALA_VERSION:$SPARK_VERSION

加载此功能后,您将能够使用Spark中C *数据帧中已存在的任何Dataframe操作。 More details on options of using C* dataframes

要将其设置为与jupyter notebook一起运行,只需使用以下属性设置您的环境。

export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS=notebook

调用pyspark将启动正确配置的笔记本。

没有必要使用pyspark-cassandra,除非你在使用python中的RDD工作时遇到了一些性能缺陷。

答案 1 :(得分:2)

在Python连接器中公开了DataFrame API。只要spark-cassandra-connector可用且SparkConf包含所需配置,就不需要其他包。您只需指定格式和选项:

df = (sqlContext
    .read
    .format("org.apache.spark.sql.cassandra")
    .options(table="mytable", keyspace="mykeyspace")
    .load())

如果您想使用纯SQL,可以按如下方式注册DataFrame

df.registerTempTable("mytable")

## Optionally cache
sqlContext.cacheTable("mytable")

sqlContext.sql("SELECT count(*) FROM mytable group by beamstamp")

连接器的高级功能(如CassandraRDD)不会向Python公开,因此如果您需要DataFrame以外的功能,那么pyspark-cassandra可能会有用。