Apache spark 如何检查配置单元表中的损坏记录

Apache spark 如何检查配置单元表中的损坏记录,apache-spark,hadoop,hive,hdfs,Apache Spark,Hadoop,Hive,Hdfs,我有一个配置单元表,它的数据每天递增。在某一天,表中插入了一些损坏的记录。是否有一种方法可以将表与HDFS上的主文件进行匹配,并从配置单元中提取损坏的记录 或 如何识别包含100万行的配置单元表中的损坏记录?使用连接,但不使用1查找加载到配置单元表vs文件中的损坏记录 示例: //read the file val df=spark.read.<format>("<path>") //read hive table val df1=spark.rea

我有一个配置单元表,它的数据每天递增。在某一天,表中插入了一些损坏的记录。是否有一种方法可以将表与HDFS上的主文件进行匹配,并从配置单元中提取损坏的记录


如何识别包含100万行的配置单元表中的损坏记录?

使用
连接,但不使用1
查找加载到配置单元表vs文件中的损坏记录

示例:

//read the file
val df=spark.read.<format>("<path>")

//read hive table
val df1=spark.read.table("<db>.<hive_table_name>")

//without using md5 hash
df.exceptAll(df1).show()
df1.exceptAll(df).show()

//create md5 hash by concatenating all column values
val df2=df.withColumn("md_hash",md5(concat_ws(",",df.columns.map(c => col(c)): _*))).select("md_hash")

val df3=df1.withColumn("md_hash",md5(concat_ws(",",df.columns.map(c => col(c)): _*))).select("md_hash")

//get non matching rows from df2 that are not existed in df3
df2.except(df3).show()
df2.exceptAll(df3).show()

//get non matching rows from df3 that are not existed in df2
df3.exceptA(df2).show()
df3.exceptAll(df2).show()

//or using full outer join
df3.join(df2,df3("md_hash") === df2("md_hash"),"full").
filter((df2("md_hash").isNull || df3("md_hash").isNull)).
show(10,false)
//读取文件
val df=spark.read.(“”)
//读蜂箱表
val df1=spark.read.table(“.”)
//不使用md5散列
df.exceptAll(df1.show())
df1.exceptAll(df.show())
//通过连接所有列值来创建md5哈希
val df2=df.withColumn(“md_hash”,md5(concat_ws(“,”,df.columns.map(c=>col(c)):))。选择(“md_hash”)
val df3=df1.withColumn(“md_hash”,md5(concat_ws(“,”,df.columns.map(c=>col(c)):))。选择(“md_hash”)
//从df2中获取df3中不存在的不匹配行
df2.except(df3.show())
df2.exceptAll(df3.show())
//从df3中获取df2中不存在的不匹配行
df3.exceptA(df2.show())
df3.exceptAll(df2.show())
//或者使用完全外部连接
join(df2,df3(“md_散列”)==df2(“md_散列”),“full”)。
过滤器((df2(“md|u hash”).isNull | df3(“md|u hash”).isNull))。
显示(10,假)

谢谢您提供详细信息。您能解释一下“通过连接所有列值实现md5哈希”的目的吗here@SNS,我们正在计算所有列的
md5
哈希值,然后很容易找到两个数据帧之间的
除外
(差异),并且我们也可以在不使用md5的情况下使用
df.except(df1).show()
(或)
df1.except(df).show()
可以在不使用md5哈希的情况下为您提供预期结果。感谢@Shu的解释1。当您说“数据每天递增”时,您是否手动将数据从HDFS文件加载到Hive@BruceWayne-是,每天都将文件添加到HDFS中,然后将数据加载到配置单元表中。