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

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

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

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

输出如下:

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

另外,使用map操作加载:

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

给了我:

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

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

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

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

d5vmydt9

d5vmydt91#

这是路。你应该手工做。

  1. rdd = sc.textFile("test.csv")
  2. rdd = rdd.map(lambda line: line.replace('\"','').split(','))
  3. def isHeader(row): return 'ID' in str(row)
  4. rdd1 = rdd.filter(isHeader)
  5. rdd2 = rdd.filter(lambda x: not(isHeader(x))).map(lambda line: [line[0], line[1], int(line[2]), int(line[3])])
  6. rdd1.union(rdd2).collect()
  7. [['ID', 'Area', 'Postcode', 'Amount'],
  8. ['1234/232', 'City', 8479, 20000],
  9. ['5987/215', 'Metro', 1111, 25000]]

相关问题