Pandas `pyspark.sql.functions.magest`函数对缺失数据的不同处理

Pandas `pyspark.sql.functions.magest`函数对缺失数据的不同处理,pandas,pyspark-sql,Pandas,Pyspark Sql,我正在使用Spark 2.2.0,希望了解grest函数如何处理丢失的数据 然而,我有两种相互矛盾的情况 import pandas as pd import pyspark.sql.functions as F df_pd = pd.DataFrame( data={ 'a': [1, 2, 3], 'b': [-1.0, 0.5, 2.7], 'c': [3, None, 1]}) df1 = spark.createDataFram

我正在使用Spark 2.2.0,希望了解
grest
函数如何处理丢失的数据

然而,我有两种相互矛盾的情况

import pandas as pd
import pyspark.sql.functions as F

df_pd = pd.DataFrame(
    data={
        'a': [1, 2, 3],
        'b': [-1.0, 0.5, 2.7],
        'c': [3, None, 1]})
df1 = spark.createDataFrame(df_pd)

df2 = spark.createDataFrame([(1, -1.0, 3), (2, 0.5, None), (3, 2.7, 1)], ['a', 'b', 'c'])


df1.withColumn('max', F.greatest(F.col('a'), F.col('b'), F.col('c'))).show()
df2.withColumn('max', F.greatest(df2.a, df2.b, df2.c)).show()
第一个结果是:

+---+----+---+---+
|  a|   b|  c|max|
+---+----+---+---+
|  1|-1.0|3.0|3.0|
|  2| 0.5|NaN|NaN|
|  3| 2.7|1.0|3.0|
+---+----+---+---+
而第二个:

+---+----+----+---+
|  a|   b|   c|max|
+---+----+----+---+
|  1|-1.0|   3|3.0|
|  2| 0.5|null|2.0|
|  3| 2.7|   1|3.0|
+---+----+----+---+

你知道为什么会这样吗?理想情况下,我希望跳过空值,在测试时我偶然发现了这一点。

第一个spark数据帧是使用panda数据帧创建的,其中没有转换为Nan,Nan是panda api对缺失数据的默认转换

在第二种情况下,您对原始数据使用spark api,对于缺少的数据,它总是转换为null


在python中,null对象由none表示。python中不能使用null,而是使用none

感谢您的解释。因此,如果我理解正确,当我从配置单元中提取数据时,它的行为将与第二个场景中的行为相同。对吗?因为我跳过了pandas步骤。是的,它将转换为null