我有一个 CSV 文件,其结构如下:
Header
Blank Row
"Col1","Col2"
"1,200","1,456"
"2,000","3,450"
我在阅读该文件时遇到两个问题。
- 我想忽略标题并忽略空白行
- 值中的逗号不是分隔符
这是我尝试过的:
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(使用前将#替换为@)