首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pyspark读取字段中带有逗号的CSV文件?

如何使用pyspark读取字段中带有逗号的CSV文件?
EN

Stack Overflow用户
提问于 2018-10-08 14:54:17
回答 1查看 9.7K关注 0票数 2

我有一个csv文件,其中包含列值中的逗号。例如,

代码语言:javascript
复制
Column1,Column2,Column3    
123,"45,6",789  

当数据中有额外的逗号时,这些值被用双引号包装。在上面的示例中,值是Column1=123、Column2=45,6和Column3=789,但是当试图读取数据时,它会给出4个值,因为Column2字段中有额外的逗号。

如何在PySpark中读取这些数据时获得正确的值?我使用的是Spark1.6.3

我目前正在做下面的工作,以创建一个rdd,然后从rdd创建一个数据框架。

代码语言:javascript
复制
rdd = sc.textFile(input_file).map(lambda line: line.split(','))
df = sqlContext.createDataFrame(rdd) 
EN

Stack Overflow用户

发布于 2018-10-08 15:08:05

您可以使用SQLContext直接将其读取到DF:

代码语言:javascript
复制
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的情况下,我只能想到一个更棘手的解决方案--这可能不是最好的方法:

  1. 用点数替换数字中的逗号
  2. 使用剩余逗号拆分

因此,您可以保留原始代码,并添加REGEX替换。

代码语言:javascript
复制
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还去掉了双引号。

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52704937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档