我有一列Parameters
类型map
的表单:
>>> from pyspark.sql import SQLContext
>>> sqlContext = SQLContext(sc)
>>> d = [{'Parameters': {'foo': '1', 'bar': '2', 'baz': 'aaa'}}]
>>> df = sqlContext.createDataFrame(d)
>>> df.collect()
[Row(Parameters={'foo': '1', 'bar': '2', 'baz': 'aaa'})]
我想在pyspark中重塑它,使所有键(foo
,bar
等)都是列,即:
[Row(foo='1', bar='2', baz='aaa')]
使用withColumn
工作:
(df
.withColumn('foo', df.Parameters['foo'])
.withColumn('bar', df.Parameters['bar'])
.withColumn('baz', df.Parameters['baz'])
.drop('Parameters')
).collect()
但是我需要一个不显式提到列名的解决方案,因为我有很多列名。
>>> df.printSchema()
root
|-- Parameters: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
由于
MapType
的键不是架构的一部分,因此必须首先收集这些键,例如:当你有了这些,剩下的就是简单的选择:
相关问题 更多 >
编程相关推荐