我正在阅读如下数据集。
f = sc.textFile("s3://test/abc.csv")
我的文件包含50多个字段,我希望为每个字段指定列标题,以便稍后在我的脚本中引用。
我如何在PySpark中做到这一点? DataFrame是这样的吗?
PS - Spark的新手。
答案 0 :(得分:5)
以下是使用DataFrame添加列名的方法:
假设您的csv具有分隔符','。在将数据传输到DataFrame之前,按如下方式准备数据:
f = sc.textFile("s3://test/abc.csv")
data_rdd = f.map(lambda line: [x for x in line.split(',')])
假设数据有3列:
data_rdd.take(1)
[[u'1.2', u'red', u'55.6']]
现在,您可以使用toDF()
将此RDD传输到DataFrame时指定列名:
df_withcol = data_rdd.toDF(['height','color','width'])
df_withcol.printSchema()
root
|-- height: string (nullable = true)
|-- color: string (nullable = true)
|-- width: string (nullable = true)
如果您没有指定列名称,则会获得一个具有默认列名称的数据框架' _1',' _2',...:
df_default = data_rdd.toDF()
df_default.printSchema()
root
|-- _1: string (nullable = true)
|-- _2: string (nullable = true)
|-- _3: string (nullable = true)
答案 1 :(得分:4)
此问题的解决方案实际上取决于您正在运行的Spark的版本。假设您使用的是Spark 2.0+,那么您可以将CSV作为DataFrame读取并添加带有toDF的列,这有利于将RDD转换为DataFrame或将列添加到现有数据框。
filename = "/path/to/file.csv"
df = spark.read.csv(filename).toDF("col1","col2","col3")
答案 2 :(得分:0)
f = sc.textFile("s3://test/abc.csv") <br />
header = f.first()
header will give you as below:-<br />
u'col1,col2,col3' --> for example taking 3 columns name
head = str(header).split(",") <br />
head will give you a list<br/>
['col1','col2','col3']
fDF = f.filter(lambda row: row!=header).map(lambda x: str(x).split(",")).toDF(head)<br/>
fdF.show() <br/>
将根据需要为您提供标头以及数据框中的数据。