データソースとしてCassandra(3.9)でSpark 2.1を使用しています。 C *は50列の大きなテーブルを持っていますが、これは私のユースケースにとっては良いデータモデルではありません。そこで私は、パーティションキーとクラスタリングキー列とともに、これらのセンサーのそれぞれに分割テーブルを作成しました。スパーク1つのデータフレームから複数のデータフレームを作成
All sensor table
-----------------------------------------------------
| Device | Time | Sensor1 | Sensor2 | Sensor3 |
| dev1 | 1507436000 | 50.3 | 1 | 1 |
| dev2 | 1507436100 | 90.2 | 0 | 1 |
| dev1 | 1507436100 | 28.1 | 1 | 1 |
-----------------------------------------------------
Sensor1 table
-------------------------------
| Device | Time | value |
| dev1 | 1507436000 | 50.3 |
| dev2 | 1507436100 | 90.2 |
| dev1 | 1507436100 | 28.1 |
-------------------------------
私は以前のテーブルから新しいテーブルにデータをコピーするためにsparkを使用しています。
df = spark.read\
.format("org.apache.spark.sql.cassandra")\
.options(table="allsensortables", keyspace="dataks")\
.load().cache()
df.createOrReplaceTempView("data")
query = ('''select device,time,sensor1 as value from data ''')
vgDF = spark.sql(query)
vgDF.write\
.format("org.apache.spark.sql.cassandra")\
.mode('append')\
.options(table="sensor1", keyspace="dataks")\
.save()
1つ1つのテーブルに対して1つずつデータをコピーするのに多くの時間(2.1)時間がかかります。私はselect *
できますし、各センサーの複数のdfを作成し、一度に保存する方法はありますか? (または順次)。コード内
spark-shellコマンドを使用してコードをどのように実行していますか? –
@Vijay_Shinde spark-submitを使用 – Junaid
Ok @Junaid、ドライバのメモリとエグゼキュータのメモリを増やしてみてください。それはあなたを助けるでしょう。 –