【问题标题】:Convert list of dict into DataFrame with Koalas使用 Koalas 将 dict 列表转换为 DataFrame
【发布时间】:2021-11-21 14:25:23
【问题描述】:

我尝试将 dicts 列表转换为 Databricks 的 Koalas DataFrame,但我不断收到错误消息:

ArrowInvalid:不能混合列表和非列表、非空值

Pandas 可以完美运行(使用 pd.DataFrame(list)),但由于公司限制,我必须使用 PySpark/Koalas。 我也尝试将列表转换为字典,但错误仍然存​​在。

列表示例:

[{'A': None,
  'B': None,
  'C': None,
  'D': None,
  'E': [],
  ...},
{'A': data,
  'B': data,
  'C': data,
  'D': data,
  'E': None,
  ...}
]

字典是这样的:

{'A': [None,  data,  [],  [],  data],
'B': [None, data, None, [], None],
'C': [None, data, None, [], None],
'D': [None, data, None, [], None],
'E': [[], None, data, [], None]}

是否可以从中获取 DataFrame? 谢谢

【问题讨论】:

  • 似乎发生了错误,因为您的记录中有两个空列表,[]None 值。是否允许修改数据?在将 [] 元素替换为 None 后,我能够使用您的数据创建一个 Koalas DataFrame。

标签: python pandas dataframe pyspark spark-koalas


【解决方案1】:

您可以使用您的数据创建 Spark DataFrame,而无需使用 spark.createDataFrame() 进行数据操作。

sdf = spark.createDataFrame(
    data_list,
    T.StructType([
        T.StructField('A', T.ArrayType(T.IntegerType()), True),
        T.StructField('B', T.ArrayType(T.IntegerType()), True),
        T.StructField('C', T.ArrayType(T.IntegerType()), True),
        T.StructField('D', T.ArrayType(T.IntegerType()), True),
        T.StructField('E', T.ArrayType(T.IntegerType()), True),
    ])
)

然后可以使用to_koalas() 将其转换为 Koalas DataFrame。

>>> sdf.to_koalas()
           A          B          C          D     E
0       None       None       None       None    []

1  [1, 2, 3]  [1, 2, 3]  [1, 2, 3]  [1, 2, 3]  None

此外,我能够在不通过 Spark 的情况下创建 Koalas DataFrame,方法是修改您的数据,使空列表 [] 的值改为 None

data_list = [
        {
            'A': None,
            'B': None,
            'C': None,
            'D': None,
            'E': None,
        },
        {
            'A': [1, 2, 3],
            'B': [1, 2, 3],
            'C': [1, 2, 3],
            'D': [1, 2, 3],
            'E': None,
        }
]
>>> import databricks.koalas as ks
>>> ks.DataFrame(data_list)
           A          B          C          D     E
0       None       None       None       None  None
1  [1, 2, 3]  [1, 2, 3]  [1, 2, 3]  [1, 2, 3]  None

【讨论】:

  • 我只需要用 numpy.NaN 替换空列表和所有 None ,考拉就可以转换它。
猜你喜欢
  • 2018-10-14
  • 2017-02-21
  • 2017-01-28
  • 2017-03-03
  • 2020-10-23
  • 2021-07-16
  • 2021-11-06
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多