2017-07-18 102 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'你可以提供这个选项。但它似乎并没有正确地推断模式,但你可以尝试 –