簡體   English   中英

基於JSON數組字段的重復

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM