[英]Convert multiple columns in pyspark dataframe into one dictionary
[英]Convert two columns in pyspark dataframe into one python dictionary
我有一個 pyspark 數據框,我想在其中使用它的兩列來輸出字典。
輸入 pyspark 數據框:
col1|col2|col3
v | 3 | a
d | 2 | b
q | 9 | g
輸出:
dict = {'v': 3, 'd': 2, 'q': 9}
我應該如何有效地做到這一點?
我相信你可以通過將 DF(只有你想要的兩列)轉換為 rdd 來實現它:
data_rdd = data.selet(['col1', 'col2']).rdd
創建一個包含鍵的 rdd,使用 rdd.map 函數與兩列配對:
kp_rdd = data_rdd.map(lambda row : (row[0],row[1]))
然后收集為地圖:
dict = kp_rdd.collectAsMap()
這是主要思想,抱歉,我現在沒有運行 pyspark 的實例來測試它。
給定您的示例,在選擇適用的列並轉換為 rdd 之后, collectAsMap
將完成所需的字典,而無需任何其他步驟:
df.select('col1', 'col2').rdd.collectAsMap()
這里有幾個不同的選項,具體取決於所需的格式...檢查一下...我正在使用結構化 api...如果您需要堅持,則另存為 json dict 或使用 parquet 保留模式
from pyspark.sql.functions import to_json
from pyspark.sql.functions import create_map
from pyspark.sql.functions import col
df = spark\
.createDataFrame([\
('v', 3, 'a'),\
('d', 2, 'b'),\
('q', 9, 'g')],\
["c1", "c2", "c3"])
mapDF = df.select(create_map(col("c1"), col("c2")).alias("mapper"))
mapDF.show(3)
+--------+
| mapper|
+--------+
|[v -> 3]|
|[d -> 2]|
|[q -> 9]|
+--------+
dictDF = df.select(to_json(create_map(col("c1"), col("c2")).alias("mapper")).alias("dict"))
dictDF.show()
+-------+
| dict|
+-------+
|{"v":3}|
|{"d":2}|
|{"q":9}|
+-------+
keyValueDF = df.selectExpr("(c1, c2) as keyValueDict").select(to_json(col("keyValueDict")).alias("keyValueDict"))
keyValueDF.show()
+-----------------+
| keyValueDict|
+-----------------+
|{"c1":"v","c2":3}|
|{"c1":"d","c2":2}|
|{"c1":"q","c2":9}|
+-----------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.