我有一個如下的表格:
| id | product_id | 代理訂單日期
|---|---|
| 1 | 1 |
我如何在json中添加一個新的列,所有的列都用自定義的鍵串聯起來,就像下面這樣,json中的鍵映射是:
。
- id -> internal_id
- product_id -> item_id 。
- agent -> associate_id 。
- order_date -> transaction_date 。
| id | product_id | 代理訂購日期wanted_column
|---|---|
| 1 | 1 |
最終,新的列將被選中并轉儲為json,以便進一步。我已經被這個問題困擾了一段時間。我試過concat和map_from_entries,但都沒有成功。
我在使用pyspark api
。uj5u.com熱心網友回復:
使用下面的方式,需要使用的重要函式是to_json和`alias'。我是用scala寫的,我相信可以把它轉換成python。
import spark.implicits._
//只是為了創建你所給的例子的資料集
val data = Seq(
("1", "1", "1", "2021-09-13"),
("1", "2", "1", "2021-09-13"),
("1", "3", "1", "2021-09-13"),
("2", "1", "1", "2021-09-13"),
("2", "2", "1", "2021-09-13"))
val dataset = data.toDF("id", "product_id", "agent", "order_date")
//如果不是靜態的,就通過回圈來創建鍵值Mapping。
val keyMapping:Map[String,String] = Map("id" -> "internal_id", "product_id" -> "item_id", "agent" -> "associate_id", "order_date" -> "transaction_date" )
val columns = keyMapping.map(f => {
new Column(f._1).alias(f._2)
}).toSeq
dataset.withColumn("wanted_column", to_json(struct(columns:_*)) ).show(false)
//輸出
--- ---------- ----- ---------- ------------------------------------------------------------------------------------
|id |product_id|agent|order_date|json_data |
--- ---------- ----- ---------- ------------------------------------------------------------------------------------
|1 |1 |1 |2021-09-13|{"internal_id":"1","item_id":"1","associate_id":"1","transaction_date":"2021-09-13"}|
|1 |2 |1 |2021-09-13|{"internal_id":"1","item_id":"2","associate_id":"1","transaction_date":"2021-09-13"}|
|1 |3 |1 |2021-09-13|{"internal_id":"1","item_id":"3","associate_id":"1","transaction_date":"2021-09-13"}|
|2 |1 |1 |2021-09-13|{"internal_id":"2","item_id":"1","associate_id":"1","transaction_date":"2021-09-13"}|
|2 |2 |1 |2021-09-13|{"internal_id":"2","item_id":"2","associate_id":"1","transaction_date":"2021-09-13"}|
--- ---------- ----- ---------- ------------------------------------------------------------------------------------
uj5u.com熱心網友回復:
可能這個問題在這里有答案 如何在pyspark中用多行選項將資料幀保存到json檔案中
我使用scala,所以這里是我要做的事情
//模擬資料,如果你已經有了一個資料框架,你就不需要這個了
val data = Seq(
("1", "1", "1", "2021-09-13"),
("1", "2", "1", "2021-09-13"),
("1", "3", "1", "2021-09-13"),
("2", "1", "1", "2021-09-13"),
("2", "2", "1", "2021-09-13")
)
輸入 spark.implicits._
val df = data.toDF("id", "product_id", "agent", "order_date")
// 嘲弄資料到此結束,你現在有一個可以使用的資料框架了
// 將列名改為所需的名稱
val new_df = df
.withColumnRenamed("id", "internal_id")
.withColumnRenamed("product_id", "item_id")
.withColumnRenamed("agent", "associate_id")
.withColumnRenamed("order_date", "transaction_date")
// 寫入json
new_df.write.json("vikas.json")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/310746.html
標籤:
