我正在函数中创建一个数据帧并返回该数据帧
def getDataFrame(rdd: RDD[MyCaseClass]) = {
spark.createDataFrame(rdd)
}
包含此函数的文件编译时没有任何错误。在另一个文件中运行它时会抛出错误:
%run "./Load_Dataframe"
The execution of this command did not finish successfully
import java.util.Properties
import org.apache.spark.rdd.RDD
defined class MyCaseClass
error: Error while emitting $$$cbf4485eb7852af86a790a85973a466$$$$w$STHierarchy$$typecreator1$1
Method too large: $$$cbf4485eb7852af86a790a85973a466$$$$w$STHierarchy$$typecreator1$1.apply (Lscala/reflect/api/Mirror;)Lscala/reflect/api/Types$TypeApi;
网上的大多数解决方案都告诉我们将函数分成多个更小的函数。但我的函数只有一行代码,不知道如何将其分成多个函数。
最佳答案
我问过这个问题。以下是我为解决此问题所采取的步骤。我不知道此问题的根本原因,我只知道这些解决方法有效:
- 分离并重新附加集群。这可以解决 80% 的问题。
- 重新启动集群,然后重试。
- 你的文件中有一个非常大的类,如果你把它分成多个类会更好。
- 您的文件中有一个巨大的函数。将该函数分解为多个较小的函数。
就我而言,我有一个很大的类(class),我将其分为两个类(class),它解决了我的问题。
关于azure - 在databricks中创建数据框时获取 "error while emitting; method too large",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67758691/