【发布时间】:2020-09-02 03:36:58
【问题描述】:
我想创建一个 pyspark 数据框,其中有一列具有可变架构。所以我的数据框看起来像这样:
| 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 个字符串类型 2 个整数类型等。在 pyspark 数据帧中是否可能出现这种情况?如果不是,那么处理问题的正确方法是什么?
-
这在标准火花中是不可能的。列具有
DataType,并且该列中的所有值都必须具有此类型。可变长度可以通过数组或映射来实现。但据我所知,这就是你所能做的。有解决方法,但在普通的 pyspark 中没有。让我尝试提供一个解决方案。
标签: python apache-spark pyspark apache-spark-sql pyspark-dataframes