spark rdd将csv文件中的所有字段作为字符串加载

7nbnzgx9  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(368)

我有一个csv文件,我正在加载它,如下所示:

sc.textFile("market.csv").take(3)

输出如下:

['"ID","Area","Postcode","Amount"',
'"1234/232","City","8479","20000"',
'"5987/215","Metro","1111","25000"']

另外,使用map操作加载:

sc.textFile("market.csv").map(lambda line: line.split(","))

给了我:

[['"ID"','"Area"','"Postcode"','"Amount"'],
['"1234/232"','"City"','"8479"','"20000"'],
['"5987/215"','"Metro"','"1111"','"25000"']]

这是太多的“”和“”,不让我分析我的结果!!
我想要这样的输出:

[["ID","Area","Postcode","Amount"],
["1234/232","City",8479,20000],
["5987/215","Metro",1111,25000]]

其中文本值为字符串类型,数字为int/double类型。
我该怎么做?谢谢。

d5vmydt9

d5vmydt91#

这是路。你应该手工做。

rdd = sc.textFile("test.csv")
rdd = rdd.map(lambda line: line.replace('\"','').split(','))

def isHeader(row): return 'ID' in str(row)

rdd1 = rdd.filter(isHeader)
rdd2 = rdd.filter(lambda x: not(isHeader(x))).map(lambda line: [line[0], line[1], int(line[2]), int(line[3])])

rdd1.union(rdd2).collect()

[['ID', 'Area', 'Postcode', 'Amount'],
 ['1234/232', 'City', 8479, 20000],
 ['5987/215', 'Metro', 1111, 25000]]

相关问题