亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當 Python 字典具有不同的鍵時,將 Python 字典合并到 Spark 數據幀中

當 Python 字典具有不同的鍵時,將 Python 字典合并到 Spark 數據幀中

米脂 2022-08-11 17:39:27
如果我有一個字典列表,看起來像這樣:list = [{'a': 1, 'b': 2, 'c': 3}, {'b': 4, 'c': 5, 'd': 6, 'e': 7}]如何將列表轉換為 Spark 數據幀,而不會刪除任何可能不在字典之間共享的鍵?例如,如果我使用 sc.parallelize(list).toDF(),則生成的數據幀將具有列 “a”、“b” 和 “c”,第二個字典的“a” 列為 null,第二個字典中的列 “d” 和 “e” 將被完全刪除。通過對字典順序的調整,我看到它服從于列表中第一個出現的字典中的鍵,因此,如果我在上面的示例中交換字典,我生成的數據幀將具有列“b”,“c”,“d”和“e”。實際上,此列表中將有兩個以上的字典,并且無法保證字典之間的鍵是否相同,因此找到一種可靠的方法來處理可能不同的鍵非常重要。
查看完整描述

1 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

您可以傳遞字典以創建DataFrame函數。


l = [{'a': 1, 'b': 2, 'c': 3}, {'b': 4, 'c': 5, 'd': 6, 'e': 7}]

df = spark.createDataFrame(l)

#UserWarning: inferring schema from dict is deprecated,please use pyspark.sql.Row instead

#warnings.warn("inferring schema from dict is deprecated

df.show()


+----+---+---+----+----+

|   a|  b|  c|   d|   e|

+----+---+---+----+----+

|   1|  2|  3|null|null|

|null|  4|  5|   6|   7|

+----+---+---+----+----+

此外,還為列提供,因為不推薦使用字典的架構推理。使用對象創建數據框要求所有字典具有相同的列。schemaRow


通過合并涉及的所有字典中的鍵,以編程方式定義架構。


from pyspark.sql.types import StructType,StructField,IntegerType


#Function to merge keys from several dicts

def merge_keys(*dict_args):

    result = set()

    for dict_arg in dict_args:

        for key in dict_arg.keys():

            result.add(key)

    return sorted(list(result))


#Generate schema given a column list

def generate_schema(columns):

    result = StructType()

    for column in columns:

        result.add(column,IntegerType(),nullable=True) #change type and nullability as needed

    return result


df = spark.createDataFrame(l,schema=generate_schema(merge_keys(*l)))


查看完整回答
反對 回復 2022-08-11
  • 1 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號