1
我正在使用Zeppelin 0.6.2和Spark 2.0。如何使用更新值更新給定另一個DataFrame的DataFrame?
我想在循環內執行一個查詢,它不是很有效。
我需要爲數據幀的每一行循環大約5000行並執行一個查詢,它將在另一個數據幀中增加一個值。
這裏是我的嘗試吧:
val t2 = time
t2.registerTempTable("t2")
u.collect().foreach{ r =>
println(r(0))
val c=r(1)
val start="\""+r(2)+"\""
val end="\""+r(3)+"\""
sql("INSERT INTO TABLE t2 SELECT time, recordings + "+c+" AS recordings FROM time WHERE time >= " + start + " AND time < " + end)
}
我想取兩個dataframes的一小部分,但它仍然很慢。我覺得我沒有這樣做。
任何想法如何快速更新數據幀?
非常感謝!我甚至不確定我的問題對其他人有意義。我使用你的輸入修改了我的代碼,並且我收到了一條消息,說我應該添加spark.conf.set(「spark.sql.crossJoin.enabled」,true)來做到這一點,並在那一刻我意識到,交叉連接是解決方案I需要而不是一個foreach行。 – ieaiaio
有趣。我每天都在使用2.1.0-SNAPSHOT,所以我們確實在使用不同版本的Spark,但我不知道在2.x版本之間可能會有如此重要的變化。你的Spark版本究竟是什麼?使用'spark.version'來找出它。你絕對應該堅持Spark SQL計算「事物」的方式。如果它解決了您的使用案例,請儘早接受我的答案。謝謝! –
順便說一句,能否請您將最新版本的代碼添加到問題中(以便其他人也可以從您的更改中受益)?我和其他SOers會非常感激。我也可以幫助你使用'spark.conf.set(「spark.sql.crossJoin.enabled」,true)''。謝謝! –