[英]spark dropDuplicates based on json array field
我有以下結構的json文件:
{"names":[{"name":"John","lastName":"Doe"},
{"name":"John","lastName":"Marcus"},
{"name":"David","lastName":"Luis"}
]}
我想讀取幾個這樣的json文件,並根據名稱中的“名稱”列來區分它們。 我試過了
df.dropDuplicates(Array("names.name"))
但它並沒有發揮作用。
這似乎是在spark 2.0中添加的回歸。 如果將嵌套列帶到最高級別,則可以刪除重復項。 如果我們基於要刪除的列創建新列。 然后我們刪除列,最后刪除列。 以下功能也適用於復合鍵。
val columns = Seq("names.name")
df.withColumn("DEDUP_KEY", concat_ws(",", columns:_*))
.dropDuplicates("DEDUP_KEY")
.drop("DEDUP_KEY")
僅供以后參考,解決方案看起來像
val uniqueNams = allNames.withColumn("DEDUP_NAME_KEY",
org.apache.spark.sql.functions.explode(new Column("names.name")))
.cache()
.dropDuplicates(Array("DEDUP_NAME_KEY"))
.drop("DEDUP_NAME_KEY")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.