Apache spark 比较两个数据帧 列表项

Apache spark 比较两个数据帧 列表项,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,需要比较两个数据帧并创建第三个数据帧以产生差异。 在比较数据帧时,需要遵循几个条件 DF1:(结构类型->empid:IntegerType,名称:StringType,电话:IntegerType) 现在,由于名称是字符串类型,所以将其转换为null。此外,由于电话是整数,空白被投为空。< /P> 我需要帮助生成第三个数据帧,它应该只指向我的转换错误。如果我认为所有的空,它采取的空白投电话,以及我不想要。请参见以下预期DF3示例 DF3: empid | name | phone |错误 1

需要比较两个数据帧并创建第三个数据帧以产生差异。 在比较数据帧时,需要遵循几个条件

DF1:(结构类型->empid:IntegerType,名称:StringType,电话:IntegerType)

现在,由于名称是字符串类型,所以将其转换为null。此外,由于电话是整数,空白被投为空。< /P> 我需要帮助生成第三个数据帧,它应该只指向我的转换错误。如果我认为所有的空,它采取的空白投电话,以及我不想要。请参见以下预期DF3示例

DF3:

empid | name | phone |错误
1 | amar | 12345 |空
2 | 23 | |名称是错误的数据类型

看起来,以编程方式查找“非casted”值并不是最好的方法。也许编写“正确的”转换函数并用测试覆盖它会更好?您可以在(col(“phone”).isNull(),lit(“NaN”))时执行类似于
的操作。否则(col(“phone”).cast(datatype))
是的,我在这里执行数据类型验证,这是动态完成的,因此不能与数据帧函数一起使用。对不起,我不明白动态数据类型验证的确切含义。你能举一个输入和预期输出的例子吗?我正在对一个大文件进行数据类型验证。架构列在属性文件中。因此,验证是为每一行动态完成的。当前,在进行铸造时,将空白列转换为NULL。正如我在上面的问题中提到的。你能帮我继续我的例子吗?为什么你有两个数据帧?为了验证架构,您正在创建另一个数据帧吗?验证的目的是什么?是否要删除邮件格式的记录,或以不同的方式映射/处理它们,或将它们转换为架构?
empid|name|phone
   1| amar | 12345
   2|  23  |<blank>
empid|name|phone
   1| amar | 12345
   2|  null  | null
empid|name|phone    |error
   1| amar | 12345  |null
   2|  23  |<blank> |name is wrong data type