Spark UDF-返回类型DataFrame

时间:2018-08-07 07:25:39

标签: scala apache-spark apache-spark-sql

我已经创建了一个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,会有什么不同。

请帮助。我已经附上了代码的屏幕截图。 enter image description here

2 个答案:

答案 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)
相关问题