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 模式,但我提到的方法是不同的。我正在尝试从列表中生成架构。
由于您希望所有列都是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 重用此架构。
我有一个肮脏的解决方案。可能不是最好的:
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)
| 归档时间: |
|
| 查看次数: |
19023 次 |
| 最近记录: |