我正在学习PySpark,能够快速创建示例数据框架以尝试PySpark API的功能非常方便。
以下代码(其中spark
是一个Spark会话):
import pyspark.sql.types as T
df = [{'id': 1, 'data': {'x': 'mplah', 'y': [10,20,30]}},
{'id': 2, 'data': {'x': 'mplah2', 'y': [100,200,300]}},
]
df = spark.createDataFrame(df)
df.printSchema()
提供一张地图(并没有正确解释数组):
root
|-- data: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
|-- id: long (nullable = true)
我需要一个结构体。如果我提供一个模式,我可以强制使用结构体:
import pyspark.sql.types as T
df = [{'id': 1, 'data': {'x': 'mplah', 'y': [10,20,30]}},
{'id': 2, 'data': {'x': 'mplah2', 'y': [100,200,300]}},
]
schema = T.StructType([
T.StructField('id', LongType()),
T.StructField('data', StructType([
StructField('x', T.StringType()),
StructField('y', T.ArrayType(T.LongType())),
]) )
])
df = spark.createDataFrame(df, schema=schema)
df.printSchema()
这确实给出了:
root
|-- id: long (nullable = true)
|-- data: struct (nullable = true)
| |-- x: string (nullable = true)
| |-- y: array (nullable = true)
| | |-- element: long (containsNull = true)
但是这样键入太多了。
有没有其他快速创建dataframe的方法,使数据列成为结构体而不需要指定模式?