【发布时间】: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