私は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
へのハンドルがありますできる。これは可能ですか?
私は可能な限りこれを達成する他の方法にもオープンしています。私はsparkR
とsparklyr
の間を移動しようと調査しましたが、バックエンドが(私の知る限り)異なっているようです。私はまた、hereから、sparklyr
のために類似したlapply
がまだ存在しないと信じています。
ありがとうございました