当前位置: 首页 > 知识库问答 >
问题:

如何使用pyspark读取字段中带有逗号的CSV文件?[副本]

叶英哲
2023-03-14

我有一个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) 

共有1个答案

冯驰
2023-03-14

您可以使用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)

由于分隔符'、'和Quote'"'是默认值,您也可以省略它们。默认情况下,引号中的逗号将被忽略。可以在此处找到参数的描述:https://github.com/databricks/spark-csv

编辑:

如果不依赖Databricks,我只能想到一个更棘手的解决方案-这可能不是最好的方法:

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

因此,您可以保留原始代码,并添加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还去掉了双引号。

 类似资料:
  • 问题内容: 我需要阅读一个CSV文件,其中包含带有逗号的字段,因此我将包含逗号的字段加了双引号,例如: 但是,当我尝试在Python中读取文件时,得到的字段由逗号分隔,如下所示: 我正在读取具有以下代码的CSV文件: 是否可以读取包含逗号的双引号字段? 问题答案: Python模块实际上确实支持带引号的字段,即使默认情况下也是如此。您的问题在于,默认情况下,Python不会跳过空格,因此您需要使用

  • 问题内容: 我有一个逗号分隔的CSV文件,其中包含NASDAQ符号。我使用扫描仪读取文件 我在第二个字段上遇到异常。问题是,该字段与文件中的其他某些字段一样也包含逗号,例如“ 1-800 FLOWERS.COM,Inc.”: 如何避免这个问题?我的代码是: 谢谢 问题答案: 除非这是家庭作业,否则您不应该自己解析CSV。使用现有库之一。例如: http //commons.apache.org/s

  • 问题内容: 我正在尝试使用csv文件读取文件,但某些字段是包含逗号的字符串。字符串用引号引起来,但是numpy不能将引号识别为定义了单个字符串。例如,使用“ t.csv”中的数据: 编码 产生错误: ValueError:检测到一些错误!第2行(获得4列而不是3列) 我正在寻找的数据结构是: 查看文档,我看不到任何解决方案。有没有办法用numpy做到这一点,或者我只需要使用模块读入数据,然后将其转

  • 目标:创建一个面向对象的图形Java应用程序,该程序将:读取一个CSV(逗号分隔值)文件,该文件由学生姓名(名字、姓氏)、ID以及内容和交付的初始标记组成(未评估学生使用-1值)。 这是我的代码,但当我点击选择文件。。当它真的应该打开文件并读取数据时,它会显示“预期的名字、姓氏、ID、内容和交付”。但不知何故,它不起作用。在此处输入图像描述 下面是我的代码: 私有类ChooseFileListen

  • 问题内容: 我有一个JFormattedTextField,我想接受5位数范围内的数字。以下代码正常工作: 但是,当我在字段中键入“ 12345”并切换焦点时,由于我的语言环境而将插入逗号,从而使文本变为“ 12,345”。如何防止在输入中添加逗号?更好的是,即使用户插入逗号,也可以将它们删除吗? 问题答案: 您必须像这样禁用NumberFormat对象中的分组: 请参阅:NumberFormat

  • 我有一个txt文件,数据如下所示 我在使用这段代码时读到了数据: 由于我的时间列,它不能正常工作,因为是通过逗号分隔的。我该如何解决这一点,如何使它工作,即使在我有多列这样的时间格式的情况下? 我想获得一个如下所示的数据帧: 多谢!