【问题标题】:Pyspark dataframe - Illegal values appearing in the column?Pyspark 数据框 - 列中出现非法值?
【发布时间】:2020-03-11 18:05:34
【问题描述】:

所以我有一张桌子(样本)

我正在使用 pyspark 数据框 API 过滤掉从未获得过金牌的“NOC”,这是我编写的代码

我的代码的第一部分

from pyspark.sql import SQLContext

from pyspark.sql.types import *
from pyspark.sql.functions import *

spark = SQLContext(sc)

df1 = spark.read.format("csv").options(header = 'true').load("D:\\datasets\\athlete_events.csv")



df = df1.na.replace('NA', '-')


countgdf = gdf.groupBy('NOC').agg(count('Medal').alias('No of Gold medals')).select('NOC').show()

它会生成输出

+---+
|NOC|
+---+
|POL|
|JAM|
|BRA|
|ARM|
|MOZ|
|JOR|
|CUB|
|FRA|
|ALG|
|BRN|
+---+
only showing top 10 rows

代码的下一部分类似于

allgdf  = df.select('NOC').distinct()

这显示输出

+-----------+
|        NOC|
+-----------+
|   DeRuyter|
|        POL|
|     Russia|
|        JAM|
|        BUR|
|        BRA|
|        ARM|
|        MOZ|
|        CUB|
|        JOR|
|     Sweden|
|        FRA|
|        ALG|
|        SOM|
|        IVB|
|Philippines|
|        BRN|
|        MAL|
|        COD|
|        FSM|
+-----------+

注意到超过 3 个字符的值了吗?这些应该是“团队”列的值,但我不确定为什么这些值会显示在“NOC”列中。很难弄清楚为什么会发生这种情况,即列中的非法值。

当我编写最终代码时

final = allgdf.subtract(countgdf).show()

最终数据框列中出现非法值时也会发生同样的情况。

如有任何帮助,我们将不胜感激。谢谢。

【问题讨论】:

    标签: sql dataframe apache-spark filter pyspark


    【解决方案1】:

    您应该为您的 CSV 文件指定一个分隔符。默认情况下,Spark 使用逗号分隔符 (,)

    这可以做到,例如:

    .option("delimiter",";")
    

    【讨论】:

    • 你能分享一些“损坏”的行吗?即:包括德鲁伊特
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 2020-01-04
    • 1970-01-01
    • 2020-04-28
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多