`pyspark.sql.functions.greatest` 函数对缺失数据的不同处理
Different treatment of missing data by `pyspark.sql.functions.greatest` function
我正在使用 Spark 2.2.0,想了解 greatest
函数如何处理缺失数据。
然而,我有两个相互矛盾的场景。
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 数据帧是使用熊猫数据帧创建的,其中 none 正在转换为 Nan,这是熊猫 api 缺失数据的默认转换。
在第二种情况下,您将 spark api 与原始数据一起使用,并且始终将缺失数据转换为 null
在 python 中,空对象由 none 表示。您不能在 python 中使用 null 而不是使用 none
我正在使用 Spark 2.2.0,想了解 greatest
函数如何处理缺失数据。
然而,我有两个相互矛盾的场景。
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 数据帧是使用熊猫数据帧创建的,其中 none 正在转换为 Nan,这是熊猫 api 缺失数据的默认转换。
在第二种情况下,您将 spark api 与原始数据一起使用,并且始终将缺失数据转换为 null
在 python 中,空对象由 none 表示。您不能在 python 中使用 null 而不是使用 none