在与RDD合作的几个项目之后,我正盯着使用数据集。我正在使用Java进行开发。
据我所知,列是不可变的 - 列没有map函数,map列的标准方法是添加withColumn
列。
我的问题是当我打电话给Column时真的发生了什么?有性能损失吗?我应该尝试尽可能少地拨打{{1}}电话,或者这不重要吗?
背驮式问题:当我调用任何其他行/列创建函数(例如explode或pivot)时,是否存在任何性能损失?
答案 0 :(得分:1)
与DataFrame交互的各种功能的性能都足够快,你永远不会有问题(或者真的注意到它们)。
如果您了解spark如何执行您在驱动程序中定义的transormations,那么这将更有意义。当您调用各种转换函数( withColumn ,选择等)时,Spark实际上并未立即执行任何操作。它只是记录您要在其执行计划中运行的操作。在您调用操作之前,Spark不会开始计算您的数据,通常是为了获得结果或写出数据。
了解您要运行的所有操作允许spark在实际运行之前对执行计划执行优化。例如,假设您使用 withColumn 来创建新列,但在将数据写入文件之前删除该列。 Spark知道它实际上不需要计算该列。
通常决定驱动程序性能的因素包括:
关于爆炸和枢轴的额外问题: