Pandas 数据帧中唯一值的Pypark数与结果不同

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

我有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('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。请参阅我的编辑。然而,提出的方法给出了相同的结果