【问题标题】:create spark data frame from a list of dictionaries of different structures从不同结构的字典列表创建火花数据框
【发布时间】:2019-04-26 22:44:27
【问题描述】:

我有一个字典列表

list_ = [
 {u'column1': u'test1', u'column2': u'None'},
 {u'added_column1': u'test2', u'column2': u'None'}]

第一行有两列column1,column2

第二行有两列added_column1, column2

我想根据数据创建一个 spark 数据框,并且应该随着列表的变化而变化

有什么长期的解决办法吗?

目前

spark.createDataFrame(list_).show() 

这可行,但我收到此警告。

用户警告:从 dict 推断架构已弃用,请使用 pyspark.sql.Row 而不是 warnings.warn("从 dict 推断架构是 已弃用,”

【问题讨论】:

  • 它们实际上是 2 个问题:保持 spark 数据帧与 dict 同步,并从 dict 创建数据帧(与 this question 重复)
  • 您分享的链接无法解决我的问题。如何创建具有不同字典的统一数据框?
  • 我修复了链接。我把你的听写列表误认为是听写了。
  • 新链接没有解决我的问题:(。寻找一个解决方案,其中根据字典列表添加新列。链接中的解决方案只创建两个列
  • 那你的问题就更复杂了!但是可以使用WithColumn添加一个新的列,我相信你可以搜索一堆相关的问题。顺便说一句,您正在创建而不是附加到原始帖子中的数据框。

标签: python json apache-spark pyspark


【解决方案1】:

您可以在 RDD 上使用toDF() 函数,并指定用于在转换为数据帧时推断架构的样本比率。

list_ = [
 {u'column1': u'test1', u'column2': u'None'},
 {u'added_column1': u'test2', u'column2': u'None'}]

sc.parallelize(list_).toDF(sampleRatio=0.9).show()

使用行(从 dict 创建)创建数据框要求所有行具有相同的列数

spark.createDataFrame(list(map(lambda x: Row(**x), list_))).show()

上面的代码会给你错误: Input row doesn't have expected number of values required by the schema. 3 fields are required while 2 values are provided.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多