我使用Spark 2.1和Cassandra(3.9)作爲數據源。 C *有一個有50列的大表,對我的用例來說這不是一個好的數據模型。所以我爲每個傳感器創建了拆分表以及分區鍵和集羣鍵列。Spark從一個數據幀創建多個數據幀
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()
逐個複製數據對於單個表格需要很多時間(2.1)小時。有什麼辦法可以select *
併爲每個傳感器創建多個df並立即保存? (或者甚至是依次)。在代碼
你如何使用spark-shell命令運行你的代碼? –
@Vijay_Shinde使用spark-submit – Junaid
Ok @Junaid,嘗試增加驅動程序內存和執行程序內存。它會幫助你。 –