我有一个5GB的csv文件,包含以下列:
ColA ColB日期值
有aprox。 11k个独特的ColA值,以及大约400个独特的ColB值。
我正在尝试使用Spark来旋转表,所以我得到了以下结构:
ColA Date ColB_1 ColB_2 ColB_3 .. ColB_n
Value_1 Value_2 Value_3 .. Val_n
我试图通过以下方式实现这一目标:
dataFrame.groupBy("ColA", "Date").pivot("ColB").agg(first("Value"))
在具有8G的2节点集群上,作业运行速度非常慢,每个集群都有4个动态分配 - 仅在几个小时内完成。我试图看看它是否可以以任何方式进行优化。我读过here,他们说:
为获得最佳性能,请指定枢轴列的不同值(如果您了解它们)
这是一个选项 - 获取colB的不同值并将其提供给下一个转换吗?有没有其他方式可以优化这样的工作?
查看节点,我看到CPU运行相当高的所有涉及这些转换的任务 - 转向应该是一个CPU密集型操作吗?此外,Shuffle Spill(内存)达到了11GB以上 - 这也是值得担心的事情吗?