使用pyspark比较两个大型数据帧

时间:2018-01-31 03:13:10

标签: python-3.x apache-spark pyspark spark-dataframe rdd

我目前正在进行数据迁移分配,尝试使用pyspark比较来自两个不同数据库的两个数据帧,以找出两个数据帧之间的差异,并将结果记录在csv文件中作为数据验证的一部分。我正在尝试一种性能有效的解决方案,因为有两个原因。大型数据帧和表键未知

#Approach 1 - Not sure about the performance and it is case-sensitive

df1.subtract(df2)

#Approach 2 - Creating row hash for each row in dataframe

piperdd=df1.rdd.map(lambda x: hash(x)) 
r=row("h_cd")
df1_new=piperdd.map(r).toDF() 

我在方法2中遇到的问题是最终数据帧(df1_new)只检索哈希列(h_cd)但我需要带有哈希码列(h_cd)的dataframe1(df1)的所有列,因为我需要报告csv文件中的行差异。请帮助

1 个答案:

答案 0 :(得分:2)

尝试使用数据框,它应该更简洁。

df1 = spark.createDataFrame([(a, a*2, a+3) for a in range(10)], "A B C".split(' '))
#df1.show()
from pyspark.sql.functions import hash
df1.withColumn('hash_value', hash('A','B', 'C')).show()

+---+---+---+-----------+
|  A|  B|  C| hash_value|
+---+---+---+-----------+
|  0|  0|  3| 1074520899|
|  1|  2|  4|-2073566230|
|  2|  4|  5| 2060637564|
|  3|  6|  6|-1286214988|
|  4|  8|  7|-1485932991|
|  5| 10|  8| 2099126539|
|  6| 12|  9| -558961891|
|  7| 14| 10| 1692668950|
|  8| 16| 11|  708810699|
|  9| 18| 12|  -11251958|
+---+---+---+-----------+