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)''。谢谢! –