我有一個要求,我必須從JSON中的兩列中選擇一個城市,其中城市存在鍵 "City"。表中的第一個值顯示為空,無法找到一個可能的解決方案
。val jsonString=""{"Zipcode":704, "ZipCodeType": "STANDARD", "City": "PARC PARQUE", "State": "PR"}"
val data = Seq((1, jsonString)
import spark.implicits._
val df=data.toDF("id", "value")
df.show(false)
import org.apache.spark.sql.types.{StringType, StructType}。
val schema = new StructType()
.add("Zipcode"/span>, StringType, true)
.add("ZipCodeType", StringType, true)
.add("City", StringType, false)
.add("City", StringType, true)
val df4=df.withColumn("value",from_json(col("value"),schema)
df4.printSchema()
df4.show(false)
val df5=df4.select(col("id"/span>),col("value.*"/span>)
df5.printSchema()
df5.show()
實際結果:
| id|Zipcode|ZipCodeType|City|City|
| 1| 704| STANDARD| null| PARC PARQUE|
預期結果:
| id|Zipcode|ZipCodeType|City|City|
| 1| 704| STANDARD|PARC PARQUE|PARC PARQUE|
uj5u.com熱心網友回復:
我認為你在這里把你的問題過度復雜化了。只要使用spark的內置函式,你就會沒事。
我建議使用spark.read.json函式來做你的處理。
這里,是我所做的。
val jsonStr = ""{"Zipcode":704, "ZipCodeType": "STANDARD", "City": "PARC PARQUE", "State": "PR"}">
import spark.implicits._
val df = spark.read.json(Seq(jsonStr).toDS) //此函式也有多載實作,所以你也可以直接從HDFS/S3讀取json檔案。
//如果你使用df.printSchema,它將不會有重復的列。
df.printSchema
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/309116.html
標籤:
上一篇:在火花中以零為前綴的列

