我有一个csv文件,其中在列值中包含逗号。例如,
Column1,Column2,Column3
123,"45,6",789
当值中的数据中带有多余的逗号时,这些值将用双引号引起来。在上面的示例中,值分别为Column1 = 123,Column2 = 45,6和Column3 = 789。但是,当尝试读取数据时,由于Column2字段中有多余的逗号,因此给了我4个值。
在 PySpark 中读取此数据时如何获得正确的值?我正在使用 Spark 1.6.3
我目前正在执行以下操作,以创建rdd,然后从rdd创建数据帧。
rdd = sc.textFile(input_file).map(lambda line: line.split(','))
df = sqlContext.createDataFrame(rdd)
答案 0 :(得分:2)
您可以使用SQLContext将其直接读取到DF:
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format('com.databricks.spark.csv')
.options(header='true', inferschema='true', quote='"', delimiter=',')
.load(input_file)
由于分隔符','和引号'“'是默认值,您也可以忽略它们。默认情况下,引号内的逗号将被忽略。有关参数的说明,请参见:https://github.com/databricks/spark-csv
编辑:
在不依赖Databricks的情况下,我只能想到一个更棘手的解决方案-这可能不是最佳方法:
因此,您可以保留原始代码,并添加REGEX替换
import re
rdd = sc.textFile(input_file).map(lambda line: (re.sub(r'\"(\d+),(\d+)\"',r'\1.\2', line)).split(','))
df.sqlContext.createDataFrame(rdd)
提供的REGEX也消除了双引号。