2017-01-22 10 views
0

私はSparkR SparkDataFrameでJavaメソッドを使用して、Cassandraにデータを書きたいと考えています。周り20K行秒の書き込み速度を実現することができSparkR DataFrameをジョブにシリアライズ

sparklyr::invoke(sparklyr::spark_dataframe(spark_tbl), "write") %>>% 
sparklyr::invoke("format", "org.apache.spark.sql.cassandra") %>>% 
sparklyr::invoke("option", "keyspace", keyspace) %>>% 
sparklyr::invoke("option", "table", table) %>>% 
sparklyr::invoke("mode", "append") %>% 
sparklyr::invoke("save") 

:例えばsparklyrの拡張機能を使用して

は、私はこのような何かを行うことができます。

ただし、私はSparkR::spark.lapplyを使用したいので、私は自分のCassandraテーブルのサブセットをローカルで収集し、スクリプトを実行してデータを書き戻すことができます。 sparklyrを使用して試したすべての方法は、シングルスレッド化してしまったため、実際にはスパークを利用していません。 SparkR

、私は次のようなものを使用してデータを書き込むことができます。

SparkR::saveDF(SparkR::as.DataFrame(dt_local), "", 
       source = "org.apache.spark.sql.cassandra", 
       table = table, 
       keyspace = keyspace, 
       mode = "append") 

しかし、書き込み速度は、この場合には毎秒行を2kΩに近いです。私はSparkR::sparkR.callJMethodを使用して、sparklyrの場合と同じチェーンを呼び出すことができると思いますが、最初にSparkDataFrameをシリアル化する必要があります。jobjへのハンドルがありますできる。これは可能ですか?

私は可能な限りこれを達成する他の方法にもオープンしています。私はsparkRsparklyrの間を移動しようと調査しましたが、バックエンドが(私の知る限り)異なっているようです。私はまた、hereから、sparklyrのために類似したlapplyがまだ存在しないと信じています。

ありがとうございました

答えて

1

ロングストーリーショートはできません。 Apache Sparkは、ネスト化された並列化操作をサポートしておらず、サポートすることはほとんどありません。これは特定のバックエンドに関連していません。ネイティブRクライアント(dbConnectRCassandra)でSparkR::*applyメソッドを使用することができます。

あなたはJVMのオブジェクトにアクセスすることができます

SparkR::as.DataFrame(dt_local)@sdf 

をが、それは単にドライバノード外で使用することはできません。

関連する問題