json - 在 spark scala 中删除 json 解析中的重复属性
问题描述
我正在解析 json 文件,并且我有一个属性会出现两次。所以我想删除一个属性,这样我就可以避免模棱两可的错误。这是示例 json。例如,address1 和 Address1 具有相同的值,但唯一的区别是第一个字符是大写字母。所以我想从 spark scala 中的 json 解析中删除其中一个。
{
"ID": 1,
"case": "12",
"addresses": {
"": [{
"address1": "abc",
"address2": "bkc",
"Address1": "abc",
"Address2": "bk"
}, {
"address1": "ede",
"address2": "ak",
"Address1": "ede",
"Address2": "ak"
}]
},
"FirstName": "abc",
"LastName": "cvv"
}
当我们在 spark scala 中进行 json 解析时,有人可以指导我如何删除其中一个。我需要自动化这意味着现在我们面临地址问题,并且将来一些其他属性可能是类似的问题。因此,我们可能需要为面临类似问题的所有情况寻找解决方案,而不是对其进行硬编码。
解决方案
val jsonString = """
{
"ID": 1,
"case": "12",
"addresses": [{
"address1": "abc",
"address2": "bkc",
"Address1": "abc",
"Address2": "bk"
}, {
"address1": "ede",
"address2": "ak",
"Address1": "ede",
"Address2": "ak"
}],
"FirstName": "abc",
"LastName": "cvv"
}
"""
val jsonDF = spark.read.json(Seq(jsonString).toDS)
import org.apache.spark.sql.functions._
//Add this before using drop
sqlContext.sql("set spark.sql.caseSensitive=true")
jsonDF.withColumn("Addresses", explode(col("addresses")))
.selectExpr("Addresses.*", "ID","case","FirstName","LastName")
.drop("address1","address2")
.show()
推荐阅读
- python - 每当我在带有 csv 模块的文件名中使用 strftime() 时,我的数据都不会写入 .csv 文件
- javascript - Papa Parse 在解析 CSV 文件时给出额外的空行
- date - SQL 搜索特定条件的日期
- terminal - 如何在macbook中将终端拆分为窗格?
- android - Meteor Android Oauth2 google账号错误10
- c - 读取“;”之间的字符串 在 C 中的 .txt 文件中
- sql - 获取一周中接下来 n 天的列表?
- lisp - Setf 函数名称
- xml - 获取重复元素名称的 XML 中属性的值
- python - pySpark - 在分组数据中查找共同值