【发布时间】:2018-10-11 14:21:14
【问题描述】:
我有一个带有 MapType 列的 pyspark DataFrame,并希望通过键名将其分解为所有列
root
|-- a: map (nullable = true)
| |-- key: string
| |-- value: long (valueContainsNull = true)
我想做sp_test.select('a.*')
但出现错误:
AnalysisException: '只能用星号扩展结构数据类型。属性:
ArrayBuffer(a);'
如果我们知道所有的键,这可以通过这样做来实现
sp_test.select(['a.%s'%item for item in ['a','b']]).show()
但我想删除关键依赖
如果我们有一个 StrucType 列,这可以通过 display(nested_df.select('*', 'nested_array.*')) 轻松实现
root
|-- _corrupt_record: string (nullable = true)
|-- field1: long (nullable = true)
|-- field2: long (nullable = true)
|-- nested_array: struct (nullable = true)
| |-- nested_field1: long (nullable = true)
| |-- nested_field2: long (nullable = true)
我有一些疑问:
- 可以将
MapType转换为StructType吗? - 我们可以直接从
MapType查询子键吗?
【问题讨论】:
-
stackoverflow.com/questions/48331272/… 这不一样但是,你可以尝试在这里寻找一些选项。
标签: python-3.x pyspark