簡體   English   中英

將 pyspark 數據框中的兩列轉換為一個 python 字典

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

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