scala - Spark UDF - 返回类型 DataFrame
问题描述
我创建了一个 UDF,它将在 DataFrame 中添加一个列标志并返回新的 dataFrame。
def find_mismatch = udf((df: DataFrame) => {
df.withColumn("Flag",when(df("T_RTR_NUM").isNull && df("P_RTR_NUM").isNull ,
"Present in Flex but missing Trn and Platform"))
}
)
我能够创建 UDF,但是当我将 DataFrame 传递给 this 时,它会出错。它适用于正常功能,但当涉及到 Spark UDF 时,它会出错。
另外,请帮助我了解如果我使用普通函数而不是 spark UDF 会有什么不同。
解决方案
您不能将 DataFrame 传递给 UDF,因为 DataFrame 由 spark 上下文(即在驱动程序处)处理,并且您不能将其传递给在不同执行器上运行的 UDF(并且只保存数据帧的一小部分)
特别是关于您要解决的问题 - 正如@Manoj 所提到的,您实际上并不需要使用 UDF 来获得所需的结果
推荐阅读
- visual-studio - 使用 Visual Studio 2017 进行 OpenBLAS 编译
- android - 执行异步操作时RecyclerView不显示数据
- nginx - Nginx - 如何访问客户端证书的主题备用名称(SAN)字段
- batch-file - 如何根据文件名移动文件?
- android - Using style instead of android:textAppearance
- javascript - 通过控制台按回车键
- python - 使用 Anaconda 新创建的虚拟环境中未显示模块
- python - 通过 JSON 文件访问 Web 元素信息 - Python
- jquery - 如何从下一个 Ajax 请求中获取 json 数据?
- java - JPA ManyToMany 重复键问题