2017-02-03 34 views
6

我在Spark中很新,我一直在嘗試將一個Dataframe轉換爲Spark中的parquet文件,但是我還沒有成功。 documentation表示我可以使用write.parquet函數來創建文件。然而,當我運行該腳本它表明我:AttributeError的:「RDD」對象有沒有屬性「寫」如何使用Spark(pyspark)編寫地板文件?

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") 

你知道如何使這項工作?

我使用的Spark版本是爲Hadoop 2.7.3構建的Spark 2.0.1。

+1

'sc.textFile()'返回'RDD'。 – mrsrinivas

+0

是的,我剛剛意識到它。我只是改成了SparkSession而不是SparkContext – ebertbm

回答

7

錯誤是由於SparkContexttextFile方法返回了RDD而我需要的是DataFrame

SparkSession有一個SQLContext在引擎蓋下。所以我需要使用DataFrameReader正確讀取CSV文件,然後將其轉換爲實木複合地板文件。

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

即使你的代碼是正確的,你的解釋也不是。 SparkContext不會將CSV文件轉換爲RDD。 SparkContext的'textFile'方法返回一個RDD,你需要的是一個'DataFrame',因此一個SQLContext或一個HiveContext也封裝在SparkSession的** spark 2 + **中你會關心糾正這個信息並接受答案結束這個問題? – eliasah

+1

謝謝@eliasah您的反饋! – ebertbm

+0

您能否通過您的問題並接受需要接受的內容,以便我們可以解決一些問題? – eliasah

相關問題