python - 使用 Koalas 将 dict 列表转换为 DataFrame
问题描述
我试图将 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 ?谢谢
解决方案
您可以使用您的数据创建一个 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()
.
>>> 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
此外,通过修改您的数据,使空列表[]
的值改为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
推荐阅读
- java - 嘲笑所有 bean 的 Junit runner
- javascript - Github 个人身份验证令牌不适用于 Github API
- oracle - 使用 JMS 和 JMSXGroupID 的 Oracle AQ 不会导致“粘性”消费者
- python - Windows AttributeError 的 Git Bash:“NoneType”对象没有属性“组”,使用 Python re 解析字符串
- sql - 按值范围对某些行进行分组
- laravel - Laravel 使用空数组查询 where In
- swift - 应用程序不拦截从 SFSafariViewController 中实例化的通用链接
- rust - 避免依赖项中的动态链接
- rust - 为什么不将指向 u8 的原始指针转换为指向 8 个布尔数组的原始指针打印正确的结果?
- javascript - 当我有 2 个可滑动的反应按钮时。当我滑动按钮 1 和按钮 2 正在移动时