7
DataFrameをSparkからMySQLに書き込む必要がありますが、挿入が遅すぎます。どうすれば改善できますか?SparkからMySQLへのJDBC書き込み速度が遅い
以下のコード:
df = sqlContext.createDataFrame(rdd, schema)
df.write.jdbc(url='xx', table='xx', mode='overwrite')
DataFrameをSparkからMySQLに書き込む必要がありますが、挿入が遅すぎます。どうすれば改善できますか?SparkからMySQLへのJDBC書き込み速度が遅い
以下のコード:
df = sqlContext.createDataFrame(rdd, schema)
df.write.jdbc(url='xx', table='xx', mode='overwrite')
https://stackoverflow.com/a/10617768/3318517で答えが私のために働いています。接続URLにrewriteBatchedStatements=true
を追加します。 (Configuration Properties for Connector/Jを参照してください)
私のベンチマークは3325秒から42秒になりました!
スパーク1.6.0 [バッチインサートをサポート](https://issues.apache.org/jira/browse/SPARK-10040)ので、古いバージョンのアップグレードを使用している場合。何らかの理由でアップグレードできない場合は、DataFrameからRDDを取得し、foreachPartitionループで手動で一括挿入します。 –
私はSpark 1.6.1を使用していますが、書き込み速度は約100レコード/秒です。ここでデータフレームの再パーティション化は役に立ちますか? –
デフォルトのバッチサイズは1000です。これを増やすと処理が速くなりますか?私は今試してみよう! (これは 'batchsize'プロパティで設定できます) –