使用 Koalas 将字典列表转换为 DataFrame

Convert list of dict into DataFrame with Koalas

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

ArrowInvalid: cannot mix list and non-list, non-null values

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? 谢谢

您可以使用您的数据创建 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