创建结构 PySpark 的 DataFrame

Posted

技术标签:

【中文标题】创建结构 PySpark 的 DataFrame【英文标题】:create DataFrame of struct PySpark 【发布时间】:2019-12-22 15:05:18 【问题描述】:

enter image description here我怎样才能创建一个空结构的数据框。? 谢谢。

dataxx = []
schema = StructType(
[
    StructField('Info1',
        StructType([
            StructField('fld', IntegerType(),True),
            StructField('fld1', IntegerType(),True),
            StructField('fld2', IntegerType(),True),
            StructField('fld3', IntegerType(),True),
            StructField('fld4', IntegerType(),True),   
            ])
    ),
]
)
df = sqlCtx.createDataFrame(dataxx, schema)

感谢您的帮助

【问题讨论】:

与熊猫无关..已删除 你试过spark.createDataFrame([], schema)吗? 这能回答你的问题吗? How to create an empty DataFrame? Why "ValueError: RDD is empty"? @blackbishop 谢谢,但这不是我的意思。我想创建这样的数据框结构体。我添加了一张图片以便更好地理解。 【参考方案1】:

如果您想创建具有特定架构但不包含数据的 DataFrame,只需向 createDataFrame 函数提供空列表即可:

from pyspark.sql.types import *

schema = StructType(
[
    StructField('Info1',
        StructType([
            StructField('fld', IntegerType(),True),
            StructField('fld1', IntegerType(),True),
            StructField('fld2', IntegerType(),True),
            StructField('fld3', IntegerType(),True),
            StructField('fld4', IntegerType(),True),   
            ])
    ),
]
)
df = spark.createDataFrame([], schema)

df.printSchema()

root
 |-- Info1: struct (nullable = true)
 |    |-- fld: integer (nullable = true)
 |    |-- fld1: integer (nullable = true)
 |    |-- fld2: integer (nullable = true)
 |    |-- fld3: integer (nullable = true)
 |    |-- fld4: integer (nullable = true)

这里spark 是sparkSession。

【讨论】:

谢谢大卫在我的 fld2 中增加价值,例如我可以这样做吗? ??df.Info1.fld2 = 22 @ceo 不,恐怕它不会像这样工作。如果您想为 info1.fld2 添加值(并且在 DataFrame 中有一行),您可以调用 withColumn 转换(或只是 select)并重新定义结构并在 fld2 中使用 lit(22)

以上是关于创建结构 PySpark 的 DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:将结构分解成列

在 Pyspark 中将结构转换为数组

Pyspark Json 结构

pyspark 从 pyspark sql 数据框创建字典数据

在 PySpark 中定义 JSON 模式结构的配置文件

Pyspark - 如何拆分具有 Datetime 类型的结构值的列?