我有一个csv文件,其中包含列值中的逗号。例如,
Column1,Column2,Column3
123,"45,6",789 当数据中有额外的逗号时,这些值被用双引号包装。在上面的示例中,值是Column1=123、Column2=45,6和Column3=789,但是当试图读取数据时,它会给出4个值,因为Column2字段中有额外的逗号。
如何在PySpark中读取这些数据时获得正确的值?我使用的是Spark1.6.3
我目前正在做下面的工作,以创建一个rdd,然后从rdd创建一个数据框架。
rdd = sc.textFile(input_file).map(lambda line: line.split(','))
df = sqlContext.createDataFrame(rdd) 发布于 2018-10-08 15:08:05
您可以使用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还去掉了双引号。
https://stackoverflow.com/questions/52704937
复制相似问题