Pandas 数据帧中唯一值的Pypark数与结果不同
我有400万行的大数据帧。其中一列是名为name的变量 当我通过:df['name].nunique检查Pandas中的唯一值的数量时,我得到的答案与Pyspark中的df.selectname.distinct.show不同,Pandas中大约有1800个,Pyspark中为350个。这怎么可能?这是数据分区吗 编辑: 数据帧中的记录名类似于:name-{number},例如:name-1、name-2等 大熊猫:Pandas 数据帧中唯一值的Pypark数与结果不同,pandas,dataframe,pyspark,unique,pyspark-dataframes,Pandas,Dataframe,Pyspark,Unique,Pyspark Dataframes,我有400万行的大数据帧。其中一列是名为name的变量 当我通过:df['name].nunique检查Pandas中的唯一值的数量时,我得到的答案与Pyspark中的df.selectname.distinct.show不同,Pandas中大约有1800个,Pyspark中为350个。这怎么可能?这是数据分区吗 编辑: 数据帧中的记录名类似于:name-{number},例如:name-1、name-2等 大熊猫: df['name'] = df['name'].str.lstrip('nam
df['name'] = df['name'].str.lstrip('name-').astype(int)
df['name'].nunique() # 1800
在Pypark中:
import pyspark.sql.functions as f
df = df.withColumn("name", f.split(df['name'], '\-')[1].cast("int"))
df.select(f.countDistinct("name")).show()
IIUC,很可能来自非数字字符。“名称”列中显示的空格。Pandas将强制进行类型转换,而使用Spark时,您将获得NULL,请参见以下示例:
df = spark.createDataFrame([(e,) for e in ['name-1', 'name-22 ', 'name- 3']],['name'])
对于Pypark:
import pyspark.sql.functions as f
df.withColumn("name1", f.split(df['name'], '\-')[1].cast("int")).show()
#+--------+-----+
#| name|name1|
#+--------+-----+
#| name-1| 1|
#|name-22 | null|
#| name- 3| null|
#+--------+-----+
对于熊猫:
df.toPandas()['name'].str.lstrip('name-').astype(int)
#Out[xxx]:
#0 1
#1 22
#2 3
#Name: name, dtype: int64
不,你不应该看到。尽可能多地发布你的代码。你能试试这个吗?df.selectpyspark.sql.functions.countDistinctname.show。别忘了先执行import pyspark。请参阅我的编辑。然而,提出的方法给出了相同的结果