2017-02-03 3 views
6

Ich bin ziemlich neu in Spark und ich habe versucht, einen Dataframe in Spark in eine Parkett-Datei zu konvertieren, aber ich hatte noch keinen Erfolg. Die documentation sagt, dass ich write.parquet Funktion verwenden kann, um die Datei zu erstellen. Allerdings, wenn ich das Skript ausführen es zeigt mir: Attribute: ‚RDD‘ Objekt kein Attribut ‚write‘Wie kann ich mit Spark (pyspark) eine Parkettdatei schreiben?

from pyspark import SparkContext 
sc = SparkContext("local", "Protob Conversion to Parquet ") 

# spark is an existing SparkSession 
df = sc.textFile("/temp/proto_temp.csv") 

# Displays the content of the DataFrame to stdout 
df.write.parquet("/output/proto.parquet") 

Wissen Sie, wie diese Arbeit zu machen?

Die Spark-Version, die ich verwende, ist Spark 2.0.1 für Hadoop 2.7.3 gebaut.

+1

'sc.textFile()' gibt 'RDD' zurück. – mrsrinivas

+0

Ja, ich habe es gerade erkannt. Ich habe gerade SparkSession statt SparkContext geändert – ebertbm

Antwort

7

Der Fehler war aufgrund der Tatsache, dass die textFile Methode von SparkContext ein RDD zurückgekehrt und was ich brauchte, war ein DataFrame.

SparkSession hat eine SQLContext unter der Haube. Also musste ich die DataFrameReader verwenden, um die CSV-Datei korrekt zu lesen, bevor ich sie in eine Parkettdatei umwandelte.

spark = SparkSession \ 
    .builder \ 
    .appName("Protob Conversion to Parquet") \ 
    .config("spark.some.config.option", "some-value") \ 
    .getOrCreate() 

# read csv 
df = spark.read.csv("/temp/proto_temp.csv") 

# Displays the content of the DataFrame to stdout 
df.show() 

df.write.parquet("output/proto.parquet") 
+2

Auch wenn Ihr Code korrekt ist, ist Ihre Erklärung nicht. SparkContext konvertiert die CSV-Datei nicht in eine RDD. Die Methode 'textFile' von SparkContext gibt eine RDD zurück und benötigt einen' DataFrame', also einen SQLContext oder einen HiveContext, der in SparkSession in ** spark 2 + ** eingekapselt ist. ** Möchten Sie diese Informationen korrigieren und die Antwort akzeptieren? um die Frage zu schließen? – eliasah

+1

Danke @eliasah für dein Feedback! – ebertbm

+0

Können Sie bitte Ihre Frage durchgehen und akzeptieren, was akzeptiert werden muss, damit wir einige Fragen schließen können? – eliasah

Verwandte Themen