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
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()
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)
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)
Vous pouvez simplement utiliser quelque chose comme ceci:
pivot_table = sparkSession.createDataFrame([("99","99")], ["col1","col2"])
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.