我想创建一个pysparkDataframe,其中有一个带有变量schema的列。所以我的数据框可以是这样的:
| Id | Variable_Column |
|----|----------------------------------|
| 1 | [{"col1":"val1"}] |
| 2 | [{"col1":"val2", "col2":"val3"}] |
所以要做到这一点。我开始是这样的:
schema = StructType([StructField("Id", IntegerType(), True),\
StructField("Variable_Column", ArrayType(StructType()), True)\
])
valdict = dict()
valdict["col1"] = "val1"
values = [(1, [valdict])]
df = spark.createDataFrame(values, schema)
display(df)
| Id | Variable_Column |
|----|-----------------|
| 1 | [{}] |
这样做就是创建一个空数组。而且这感觉不对,我希望内部列的类型也被保留。请建议插入数据的正确方法。对于变量列,我使用“ ArrayType(StructType())
,这是要使用的列类型吗?
2条答案
按热度按时间rjee0c151#
您可以按以下方式定义架构:
这将产生如下输出:
dxpyg8gm2#
解决方案1
如果您只想创建一个值数目可变的列,可以使用
ArrayType
的StructType
. 在你的例子中,你定义了一个空的StructType
,从而得到结果。您可以这样定义Dataframe:
与您提供的示例相对应:
请注意,在这种情况下不需要显式定义模式,但如果需要,它将如下所示(顺便说一下,您可以调用df1.schema来打印它):
解决方案2
同样地,你可以使用
MapType
键入以下内容:解决方案3
在注解中,您说您还需要变量类型。这在Dataframe中是不可能的。如果这真的是你想要的,你可能没有使用正确的工具。但如果它只是一个角大小写,您可以将数据类型的记录保存在如下字符串中: