我在scala中使用spark数据帧。我的数据框大约有400列,1000-1M行。我正在跑步 某些条件的 datagrame.selectExpr操作(1到400列),一旦获取它们,我就会聚合所有这些列的值。
我的selectexpr声明:
val df = df2.selectExpr(getColumn(beginDate, endDate, x._2): _*)
getColumn方法将在我的数据帧的开始和结束之间每天获取列(由于我们有明智的数据,这可能是365列。)
我对表达式的总结是:
df.map(row => (row(0), row(1), row(2), (3 until row.length).map(row.getLong(_)).sum)).collect()
我发现选择这么多列会降低我的工作效率。无论如何,这样可以更快地获取400列吗?
答案 0 :(得分:0)
Dataframe比RDD更好的优化。你正在使用它是好的。但是你可以检查Spark UI以及花费很多时间的阶段。如果由于计算或由于数据加载而花费时间。 Reshaping Data。并尝试缓慢扩展以获得更快的输出。检查分区是否也可以帮助您的代码运行它更胖。 Apache Spark Code Faster。使代码更快地依赖于各种因素,并尝试使用这些代码进行优化。