Сгенерировать пустой спарк DF предоставил список с именами столбцов - PullRequest
0 голосов
/ 18 сентября 2018

Я не уверен, что это правильный вопрос, но я хотел бы спросить.

Есть ли способ, которым я могу использовать список с именами столбцов и генерировать пустой фрейм данных искры, схема должна бытьсоздан с элементами из списка с типом данных для всех столбцов как 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']

Как я могу использовать этот список для создания схемы DF или пустой DF

** Это несколько похоже на Как создать пустой DataFrame с указанной схемой? , так как я также пытаюсь создать пустую схему DF, но упомянутый мной подход отличается.Я пытаюсь сгенерировать схему из списка.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

В Scala:

val columns = List("ColA", "ColB", "ColC")
val result = columns.foldLeft(spark.emptyDataFrame)((a, b) => a.withColumn(b, lit("anyStringValue")))
result.printSchema()
result.show(false)

Вывод:

root
 |-- ColA: string (nullable = false)
 |-- ColB: string (nullable = false)
 |-- ColC: string (nullable = false)

+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
+----+----+----+
0 голосов
/ 18 сентября 2018

Поскольку вы хотите, чтобы все столбцы были 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("|")])

Теперь просто передайте пустой список в качестве данных вместе с этой схемой spark.createDataFrame():

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

Теперь вы можете использовать эту схему и для других фреймов данных.

0 голосов
/ 18 сентября 2018

У меня грязное решение. Вероятно, не самый лучший:

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|
+----+----+----+
+----+----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...