【问题标题】:Spark dataframe with strange values after reading CSV读取 CSV 后具有奇怪值的 Spark 数据帧
【发布时间】:2021-01-15 10:58:41
【问题描述】:

来自here,我正在尝试从 Pyspark 中的this dataset 读取正确的值。我使用df = spark.read.csv("hashtag_donaldtrump.csv", header=True, multiLine=True) 取得了不错的进展,但现在我在某些单元格中有一些奇怪的值,正如您在这张图片中看到的(最后几行):

你知道我怎样才能摆脱它们吗?或者,如何使用其他程序读取格式的 CSV?我很难使用像 Vim 或 Nano 这样的文本编辑器来猜测错误在哪里。谢谢!

【问题讨论】:

    标签: python csv apache-spark pyspark


    【解决方案1】:

    Spark 似乎很难读懂这一行:

    2020-10-15 00:00:23,1.3165293165079306e+18,"""IS THIS WRONG??!!"" ...
    

    因为有三个双引号。但是 pandas 似乎很了解这一点,因此作为一种解决方法,您可以先使用 pandas 读取 csv 文件,然后转换为 Spark 数据帧。通常不建议这样做,因为涉及的开销很大,但对于这个小的 csv 文件,性能损失应该是可以接受的。

    df = spark.createDataFrame(pd.read_csv('hashtag_donaldtrump.csv').replace({float('nan'): None}))
    

    replace 用于将 pandas 数据框中的 nan 替换为 None。 Spark 认为nan 是一个浮点数,当字符串类型列中有nan 时它会感到困惑。

    如果文件对于 pandas 来说太大,那么您可以考虑删除那些 Spark 无法使用 mode='DROPMALFORMED' 解析的行:

    df = spark.read.csv('hashtag_donaldtrump.csv', header=True, multiLine=True, mode='DROPMALFORMED')
    

    【讨论】:

    • 我收到此错误:Error tokenizing data. C error: Buffer overflow caught - possible malformed input file。我不知道我是否遗漏了什么
    • @Awacate 试试pd.read_csv('trump.csv', engine='python') 吗?
    • 对不起,我忘了说我也试过了,它给了我一个错误,说我没有足够的内存或类似的东西,这很奇怪,因为我使用的是 AWS 实例16GB 内存...我也尝试使用 lineSeparator 选项,得到与引擎选项相同的错误
    • @Awacate 你能试试我编辑的答案的最后一行吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 2020-02-04
    • 2022-01-18
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多