2017-07-18 64 views
0

我正在嘗試讀取存儲在S3中的csv。 CSV不包含標題行提供spark.csv方法的名稱列表

火花2.0.0或更高版本,

我嘗試閱讀它:

df = spark.read.csv("path_to_csv") 

現在,這給了我的列名:

_c0, _c1 , _c2 , ... 

有沒有辦法通過我可以在上面的函數中提供列名稱?在Pandas中,我可以使用參數name=['col1','col2',...]。這裏可能有類似的東西嗎?

PS:我最初的想法是讀取它作爲CSV,然後後處理該列,因爲spark.read.csv方法似乎沒有任何參數可以幫助這裏。

+0

一個後處理解決方案,我能想到的是'new_df = df.toDF(所有 「col1」, 「col2上」 ..)' –

+0

你試過類似於:df2 = df.withColumnRenamed(「_ c0」,「NewName1」)withColumnRenamed(「_ c1」,「NewName2」) – tbone

+0

@tbone是的,我嘗試過,它的工作原理。我不喜歡它的原因是這需要爲每一列調用此方法。對我來說,這種方法似乎更適合單列更換而不是完整列表。我現在試圖看看github上是否有一個功能請求直接在'read()'方法中提供列名。 –

回答

0

你可以試試這個

from pyspark.sql.types import StructType, StructField, StringType 

你可以創建自己的模式

schema = StructType([StructField("X", StringType(), True), StructField("Y", StringType(), True)]) 



df = spark.read.csv("path to csv",header=False,schema=schema) 
+0

有沒有辦法讓我讓火花推斷模式?我試過了,它可以工作,但需要爲每列明確提供數據類型。 –

+0

inferSchema ='true'你可以提供這個選項。但它似乎並沒有正確地推斷模式,但你可以嘗試 –