Различная обработка отсутствующих данных функцией `pyspark.sql.functions.greatest` - PullRequest
0 голосов
/ 03 сентября 2018

Я использую 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|
+---+----+----+---+

Есть идеи, почему это происходит? В идеале я хочу пропустить нули, и при тестировании я наткнулся на это.

1 Ответ

0 голосов
/ 03 сентября 2018

первый искровой фрейм данных создается с использованием фрейма данных panda, где ни один из них не преобразуется в Nan, который является преобразованием panda api по умолчанию для пропущенных данных.

Во втором случае вы используете spark api с необработанными данными и всегда преобразуете в ноль для отсутствующих данных

В Python нулевой объект не представлен ни одним. Вы не можете использовать нуль в Python, вместо него ни один не используется

...