2016-02-28 101 views
1

我對這個故事中的不同角色有點困惑:PySpark,SparkSQL,Cassandra和pyspark-cassandra連接器。如何使用PySpark,SparkSQL和Cassandra?

據我瞭解,Spark的發展很快,SparkSQL現在是一個關鍵組件(使用'dataframes')。顯然,如果沒有SparkSQL,絕對沒有理由工作,特別是連接到Cassandra時。

所以我的問題是:需要什麼組件,以及如何以最簡單的方式將它們連接在一起?

隨着spark-shell在斯卡拉我可以做簡單的

./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") 

我怎麼能做到這一點與pyspark

這裏有幾個子問題以及我收集到的部分答案(如果我錯了,請更正)。

  • 是需要pyspark-casmandra(我不這麼認爲 - 我不明白什麼是擺在首位做)

  • 我需要使用pyspark或者我可以用我的定期jupyter notebook並自己導入必要的東西?

回答

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可能會有用。

+0

好的謝謝。是否有可能(如在Scala中)通過SQL API直接訪問表? –

+0

據我所知,這是不可能的。你可以像往常一樣'registerTempTable'。此外,沒有相當於'CassandraRDD'。 – zero323

+0

好的。我稍後會發布一些代碼,以確保我做對了。 –

3

Pyspark應該按照Spark Cassandra Connector python docs中所述的spark-cassandra-connector包裝啓動。

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

有了這個加載,你將能夠使用任何數據框的操作已經存在星火內對C * dataframes的。 More details on options of using C* dataframes

要設置此項以與jupyter notebook一起運行,只需使用以下屬性設置您的env即可。

export PYSPARK_DRIVER_PYTHON=ipython 
export PYSPARK_DRIVER_PYTHON_OPTS=notebook 

並致電pyspark將啓動正確配置的筆記本電腦。

沒有必要使用pyspark-cassandra,除非你在Python中使用RDDs有一些性能缺陷。