Apache spark 列数据值一致性检查PySpark SQL

Apache spark 列数据值一致性检查PySpark SQL,apache-spark,pyspark,apache-spark-sql,spark-dataframe,pyspark-sql,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,Pyspark Sql,我有两个具有相同列名、相同数据、相同行数的表,但行的顺序可能不同。现在,我从表_1中选择A列,从表_2中选择A列,并比较这些值。如何使用PySpark SQL实现这一点?我可以执行sha2/md5校验和并进行比较吗 从pyspark导入SparkContext,SparkConf 从pyspark.sql导入HiveContext 从pyspark.sql.types导入* 从pyspark.sql导入行 导入pyspark.sql.f函数 应用程序名称=测试 表1=DB1.1部门 表2=DB2

我有两个具有相同列名、相同数据、相同行数的表,但行的顺序可能不同。现在,我从表_1中选择A列,从表_2中选择A列,并比较这些值。如何使用PySpark SQL实现这一点?我可以执行sha2/md5校验和并进行比较吗

从pyspark导入SparkContext,SparkConf 从pyspark.sql导入HiveContext 从pyspark.sql.types导入* 从pyspark.sql导入行 导入pyspark.sql.f函数 应用程序名称=测试 表1=DB1.1部门 表2=DB2.department conf=SparkConf.setAppNameapp_name sc=SparkContextconf=conf sqlContext=HiveContextsc query1=从%s%table1中选择* df1=sqlContext.sqlquery1 query2=从%s%table2中选择* df2=sqlContext.sqlquery2 df3=sqlContext.sqlSELECT DB1.departmentid从DB1.department完全联接 a.departmentid=b.departmentid上的DB2.department b,其中a.departmentid 为NULL或b.departmentid为NULL df5=sqlContext.sqlselect来自department1的md5departmentid 回溯最近一次呼叫上次: 文件,第1行,在 文件/usr/lib/spark/python/pyspark/sql/context.py,第580行,sql格式 返回DataFrameself.\u ssql\u ctx.sqlquery,self 文件/usr/lib/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py,第行 813,打电话__ 文件/usr/lib/spark/python/pyspark/sql/utils.py,第51行,deco格式 引发分析异常。拆分“:”,1[1],堆栈跟踪 pyspark.sql.utils.AnalysisException:UCA无法解析“md5departmentid” 由于数据类型不匹配:但参数1需要二进制类型, “部门ID”是bigint类型。;第1行位置11

当尝试使用md5校验和时,表示它需要binarytype,但部门id是bigint

表1:

部门ID部门名称部门地址 1 A纽约 2 B新泽西州 3 C圣何塞 4 D WashingtonDC 5 E墨西哥 德里6楼 7克普纳 8小时钦奈 表2:

部门ID部门名称部门地址 7克普纳 8小时钦奈 1 A纽约 2 B新泽西州 3 C圣何塞 4 D WashingtonDC 5 E墨西哥 德里6楼
在表中,两行的顺序刚刚改变,但数据仍然保持不变,所以从技术上讲,这两个表是相同的。除非添加新行或修改值,否则这两个表是相同的。举例说明,在实际中,我们处理Bigdata时,最简单的解决方案是:

def是_identicalx,y: 返回x.count==y.count和x.subtracty.count==0 示例数据:

df1=spark.createDataFrame [1,A,纽约,2,B,新泽西, 3,C,圣何塞,4,D,华盛顿,5,E,墨西哥,6,F,德里, 7,G,浦那,8,H,钦奈], 部门ID、部门名称、部门添加 df2=spark.createDataFrame [7,G,浦那,8,H,钦奈,1,A,纽约,2,B,新泽西, 3,C,圣何塞,4,D,华盛顿,5,E,墨西哥,6,F,德里], 部门ID、部门名称、部门添加 df3=spark.createDataFrame [1,A,纽约,2,B,新泽西, 3,C,圣何塞,4,D,华盛顿,5,E,墨西哥,6,F,德里, 7,G,浦那,8,H,钦奈], 部门ID、部门名称、部门添加 df4=spark.createDataFrame [3,C,圣何塞,4,D,华盛顿,5,E,墨西哥,6,F,德里], 部门ID、部门名称、部门添加 检查:

是否为相同的LDF1,df2 符合事实的 是否为相同的LDF1,df3 错误的 是否与LDF1、df4相同 错误的 是否为相同的LDF4,df4 符合事实的 外接

从pyspark.sql.functions导入col、coalesce、lit 从functools导入reduce 从操作员导入和_ def是相同的,x,y,keys=departmentid,: def两个_nullc: 返回colx.{}.formatc.isNull& coly.{}.formatc.isNull def两个_相等: 返回colx.{}.formatc== coly.{}.formatc,litFalse p=reduceand,[both_nullc | both_equalc表示x列中的c,如果c不在键中] 返回x.aliasx.joiny.aliasy、listkeys、full\u .其中~p.count==0 你会得到同样的结果:

相同吗 符合事实的 是相同的吗 错误的 相同吗 错误的 是相同的吗 符合事实的
md5不适用于您,因为它不是聚合函数。它计算特定值的校验和。

还检查@user8371915 spark 1.6.0