2017-04-07 89 views
1

我正在通過加載PySpark中的文本文件中的數據來創建RDD。現在我想將此RDD轉換爲dataframe,但我不知道RDD中有多少列和哪些列。我正在嘗試使用createDataFrame(),並且顯示的語法是sqlDataFrame = sqlContext.createDataFrame(rdd, schema)。我試圖看看如何創建schema,但大多數示例顯示了一個硬編碼模式創建示例。現在,因爲我不知道列是什麼,所以我如何將rdd轉換爲dataframe?這是我到目前爲止的代碼:如何將PySpark RDD轉換爲具有未知列的數據框?

from pyspark import SQLContext 
sqlContext = SQLContext(sc) 

example_rdd = sc.textFile("\..\file1.csv") 
       .map(lambda line: line.split(",")) 

#convert the rdd into a dataframe 
# df = sc.createDataFrame() # dataframe conversion here. 

注1:我不知道列的原因是因爲我想創建一個可以從RDD創建數據框一般腳本的文件中讀取與任何列數。

注2:我知道有一個叫toDF()另一個函數,可以轉換到RDD數據框,但同樣我也有同樣的問題,如何通過未知列wuth。

注意3:文件格式不只是一個csv文件。我已經展示了它的一個例子,但它可以是任何格式的任何文件

+0

爲什麼不爲列名創建任意佔位符?假設數據的預期維度是n列,那麼對於範圍(n)]中的'cols = [「col」.join(str(i))''。 – Jon

+0

另外,對於您的模式,當您將數據輸入到腳本時,應該建立一種檢測數據類型的方法,例如'types = [type(i)for i in data]',其中數據只是佔位符你正在閱讀的東西。 – Jon

+0

@Jon我怎麼知道n的價值?我的意思是在文件中可以有10列,但在另一個文件中可以有15 – user2966197

回答

4

Spark 2.0.0以上版本支持將csv作爲DataFrame直接讀取。爲了讀取一個csv,使用DataFrameReader.csv方法

df = spark.read.csv("\..\file1.csv", header=True) 

在你的情況,如果你沒有訪問火花的對象,就可以使用,

from pyspark import SQLContext 
sqlContext = SQLContext(sc) 
df = sqlContext.read.csv("\..\file1.csv", header=True) 

如果文件中有不同分隔符,您也可以指定。

# Eg if separator is :: 
df = spark.read.csv("\..\file1.csv", head=True,sep="::") 
+0

,但csv不是我將要讀取的唯一文件格式,這就是爲什麼我不使用read_csv()。 – user2966197

+0

你有權訪問spark 2.0.0或更高版本嗎?我可以提供一個代碼示例。 –

+0

我無權訪問2.0.0,但DataFrameReader.csv方法是否也讀取非csv文件? – user2966197