生成空的 Spark DF 提供了包含列名称的列表

dar*_*ter 6 apache-spark apache-spark-sql pyspark

我不确定这是否是一个有效的问题,但我想问一下。

有没有一种方法可以使用带有列名的列表并生成一个空的 Spark 数据框,应该使用列表中的元素创建架构,并将所有列的数据类型设置为 StringType。

例如:

column_names = "ColA|ColB|ColC"

def Convert(string):
    li = list(string.split("|"))
    return li

schema_names = Convert(column_names)

#schema_names = ['ColA', 'ColB', 'ColC']
Run Code Online (Sandbox Code Playgroud)

如何使用此列表创建 DF 架构或空 DF

**这有点类似于如何创建具有指定架构的空 DataFrame?,因为我也尝试创建空的 DF 模式,但我提到的方法是不同的。我正在尝试从列表中生成架构。

pau*_*ult 9

由于您希望所有列都是StringType(),因此定义架构如下:

from pyspark.sql.types import StructType, StructField, StringType

column_names = "ColA|ColB|ColC"
mySchema = StructType([StructField(c, StringType()) for c in column_names.split("|")])
Run Code Online (Sandbox Code Playgroud)

现在只需将一个空列表作为数据与此模式一起传递到spark.createDataFrame()

df = spark.createDataFrame(data=[], schema=mySchema)
df.show()
#+----+----+----+
#|ColA|ColB|ColC|
#+----+----+----+
#+----+----+----+
Run Code Online (Sandbox Code Playgroud)

现在您也可以为其他 DataFrame 重用此架构。


Ste*_*ven 4

我有一个肮脏的解决方案。可能不是最好的:

column_names = "ColA|ColB|ColC"

df = spark.createDataFrame(
  [
    tuple('' for i in column_names.split("|"))
  ],
  column_names.split("|")
).where("1=0")

df.show()

+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
+----+----+----+
Run Code Online (Sandbox Code Playgroud)