我已经创建了一个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,会有什么不同。
答案 0 :(得分:1)
您不能将DataFrame传递给UDF,因为DataFrame是由Spark上下文处理的,即在驱动程序处,并且您不能将其传递给在不同执行程序上运行的UDF(并且仅保留一部分一个数据框)
特别是关于您要解决的问题-正如@Manoj所述,您实际上不需要使用UDF即可获得所需的结果
答案 1 :(得分:0)
您可以在没有udf
的情况下执行此操作
import org.apache.spark.sql.Dataset
import org.apache.spark.sql.Row
def findMismatch(df:Dataset[Row]):Dataset[Row]={
val transDF=df.withColumn("Flag",when(df("T_RTR_NUM").isNull && df("P_RTR_NUM").isNull ,"Present in Flex but missing Trn and Platform"))
transDF
}
val transDF=findMismatch(df)