Как создать пустой DataFrame? Почему "ValueError: RDD пуст"?

Я пытаюсь создать пустой фреймворк в Spark (Pyspark).

Я использую аналогичный подход к рассмотренному здесь здесь, здесь описывается описание ссылки, но оно не работает.

Это мой код

df = sqlContext.createDataFrame(sc.emptyRDD(), schema)

Это ошибка

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 404, in createDataFrame
rdd, schema = self._createFromRDD(data, schema, samplingRatio)
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 285, in _createFromRDD
struct = self._inferSchema(rdd, samplingRatio)
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/sql/context.py", line 229, in _inferSchema
first = rdd.first()
File "/Users/Me/Desktop/spark-1.5.1-bin-hadoop2.6/python/pyspark/rdd.py", line 1320, in first
raise ValueError("RDD is empty")
ValueError: RDD is empty

Ответ 1

расширяя ответ Джо Видена, вы можете создать схему без полей:

schema = StructType([])

поэтому, когда вы создаете DataFrame, используя это как свою схему, вы получите DataFrame[].

>>> empty = sqlContext.createDataFrame(sc.emptyRDD(), schema)
DataFrame[]
>>> empty.schema
StructType(List())

В Scala, если вы решите использовать sqlContext.emptyDataFrame и проверьте схему, он вернет StructType().

scala> val empty = sqlContext.emptyDataFrame
empty: org.apache.spark.sql.DataFrame = []

scala> empty.schema
res2: org.apache.spark.sql.types.StructType = StructType()    

Ответ 2

В то время, когда этот ответ был написан, похоже, вам нужна какая-то схема

from pyspark.sql.types import *
field = [StructField("field1", StringType(), True)]
schema = StructType(field)

sqlContext.createDataFrame(sc.emptyRDD(), schema)

Ответ 3

Это будет работать с искровой версией 2.0.0 и более

from pyspark.sql import SQLContext
sc = spark.sparkContext
schema = StructType([StructField('col1', StringType(), False),StructField('col2', IntegerType(), True)])
sqlContext.createDataFrame(sc.emptyRDD(), schema)

Ответ 4

Вы можете просто использовать что-то вроде этого:

   pivot_table = sparkSession.createDataFrame([("99","99")], ["col1","col2"])

Ответ 5

Вы можете сделать это, загрузив пустой файл (parquet, json и т.д.) Следующим образом:

df = sqlContext.read.json("my_empty_file.json")

Затем, когда вы попытаетесь проверить схему, вы увидите:

>>> df.printSchema()
root

В Scala/Java, не проходящий путь, тоже должен работать, в Python он генерирует исключение. Также, если вы когда-либо переключитесь на Scala/Python, вы можете использовать этот метод для его создания.

Ответ 6

spark.range(0).drop("id")

Это создает DataFrame со столбцом "id" и без строк, затем удаляет столбец "id", оставляя вас с действительно пустым DataFrame.

Ответ 7

Вы можете создать пустой фрейм данных, используя следующий синтаксис в pyspark:

df = spark.createDataFrame([], ["col1", "col2", ...])

где [] представляет пустое значение для col1 и col2. Затем вы можете зарегистрироваться как временное представление для ваших запросов sql:

**df2.createOrReplaceTempView("artist")**