如何使用 PySpark 将 CSV 文件读取为数据帧时跳过行?

2024-03-16

我有一个 CSV 文件,其结构如下:

Header
Blank Row
"Col1","Col2"
"1,200","1,456"
"2,000","3,450"

我在阅读该文件时遇到两个问题。

  1. 我想忽略标题并忽略空白行
  2. 值中的逗号不是分隔符

这是我尝试过的:

df = sc.textFile("myFile.csv")\
              .map(lambda line: line.split(","))\ #Split By comma
              .filter(lambda line: len(line) == 2).collect() #This helped me ignore the first two rows

但是,这不起作用,因为值中的逗号被读取为分隔符,并且len(line)返回 4 而不是 2。

我尝试了另一种方法:

data = sc.textFile("myFile.csv")
headers = data.take(2) #First two rows to be skipped

这个想法是然后使用过滤器而不是读取标题。但是,当我尝试打印标题时,我得到了编码值。

[\x00A\x00Y\x00 \x00J\x00u\x00l\x00y\x00 \x002\x000\x001\x006\x00]

读取 CSV 文件并跳过前两行的正确方法是什么?


尝试使用 csv.reader 和 'quotechar' 参数。它将正确分割行。 之后,您可以根据需要添加过滤器。

import csv
from pyspark.sql.types import StringType

df = sc.textFile("test2.csv")\
           .mapPartitions(lambda line: csv.reader(line,delimiter=',', quotechar='"')).filter(lambda line: len(line)>=2 and line[0]!= 'Col1')\
           .toDF(['Col1','Col2'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PySpark 将 CSV 文件读取为数据帧时跳过行? 的相关文章

随机推荐