2016-02-28 4 views
1

Я немного смущен с разными участниками этой истории: PySpark, SparkSQL, Cassandra и коннектор pyspark-cassandra.Как работать с PySpark, SparkSQL и Cassandra?

Как я понимаю, Spark развился довольно много, и SparkSQL теперь является ключевым компонентом (с «dataframes»). По-видимому, нет никаких оснований для работы без SparkSQL, особенно если вы подключитесь к Cassandra.

Итак, мой вопрос: какой компонент необходим и как я могу связать их вместе самым простым способом?

С spark-shell в Scala я мог бы сделать просто

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

OK спасибо. Возможно ли (как в Scala) иметь прямой доступ к таблицам через SQL api? –

+0

Насколько я знаю, это невозможно. Вы можете, конечно, «registerTempTable», как обычно. Кроме того, нет эквивалента 'CassandraRDD'. – zero323

+0

Хорошо. Позднее я выложу код, чтобы убедиться, что все правильно. –

3

Pyspark следует начинать с упаковки spark-cassandra-connector, как описано в соединителе Spark Cassandra python docs.

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

С этим загружен вы сможете использовать любой из операций Dataframe уже присутствующих внутри Спарк на 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, если вы не пересекаетесь при работе с RDD в python, который имеет несколько ошибок производительности.