web-dev-qa-db-fra.com

Comment créer un DataFrame vide? Pourquoi "ValueError: RDD est vide"?

J'essaie de créer un dataframe vide dans Spark (Pyspark).

J'utilise une approche similaire à celle décrite ici entrez la description du lien ici , mais cela ne fonctionne pas.

C'est mon code

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

C'est l'erreur

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
13
user3276768

en prolongeant le answer de Joe Widen, vous pouvez réellement créer le schéma sans champs comme celui-ci:

schema = StructType([])

ainsi, lorsque vous créez le DataFrame en l’utilisant comme schéma, vous obtenez un DataFrame[]

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

Dans Scala, si vous choisissez d'utiliser sqlContext.emptyDataFrame et extrayez le schéma, il renverra StructType().

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

scala> empty.schema
res2: org.Apache.spark.sql.types.StructType = StructType()    
21
Ton Torres

Au moment où cette réponse a été écrite, il semble que vous ayez besoin d’une sorte de schéma.

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

sqlContext.createDataFrame(sc.emptyRDD(), schema)
8
Joe Widen

Cela fonctionnera avec spark version 2.0.0 ou plus

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

Vous pouvez simplement utiliser quelque chose comme ceci:

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

Vous pouvez le faire en chargeant un fichier vide (parquet, json etc.) comme ceci:

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

Ensuite, lorsque vous essayez de vérifier le schéma, vous verrez:

>>> df.printSchema()
root

En Scala/Java, ne pas passer un chemin devrait fonctionner aussi, en Python, il lève une exception. De plus, si vous passez à Scala/Python, vous pouvez utiliser cette méthode pour en créer une.

0
Mateusz Dymczyk