這是我正在處理的資料框,我想將其更改為具有以下格式的資料集
"Id":{ "Unique-id" : "id" "Details" : { "Person-name" : "name" "Person-name" : "age" } }
uj5u.com熱心網友回復:
你的 json 有幾個問題。
- 您不能在子 json“詳細資訊”中兩次使用相同的鍵“人名”
- 您缺少外部花括號。
所以更正后的 json 物件應該是這樣的。
{"Id": {"Unique-id": "id", "Details": {"Person-name": "name", "Person-age": "25"}}}
如果是這樣,那么轉型是非常直接的。
df = (spark.read.json('test.json')
.withColumn('Unique-Id', F.col('Id.Unique-id'))
.withColumn('age', F.col('Id.Details.Person-age'))
.withColumn('name', F.col('Id.Details.Person-name'))
.drop('Id')
.withColumnRenamed('Unique-Id', 'id')
)
uj5u.com熱心網友回復:
您只需要選擇您需要的欄位。假設以下輸入資料幀:
case class Top(Id: Inner)
case class Inner(`Unique-id`: String, Details: Details)
case class Details(`Person-name`: String, `Person-age`: Int)
val ss: SparkSession = ???
import ss.implicits._
val df = Seq(
Top(Inner("1201", Details("satish", 25)))
).toDF
您將擁有以下內容:
root
|-- Id: struct (nullable = true)
| |-- Unique-id: string (nullable = true)
| |-- Details: struct (nullable = true)
| | |-- Person-name: string (nullable = true)
| | |-- Person-age: integer (nullable = false)
您可以使用以下命令構建所需的輸出:
df.select(
col("Id.Unique-id") as "id",
col("Id.Details.Person-name") as "name",
col("Id.Details.Person-age") as "age",
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/362484.html
標籤:斯卡拉 阿帕奇火花 apache-spark-sql 火花流
上一篇:如何在具有多個集群和開發人員并行作業的資料塊作業區中避免jar沖突?
下一篇:創建由多對多欄位組成的模型實體
