проблема фильтрации фрейма данных pyspark, если он содержит «>» или «<» - PullRequest
0 голосов
/ 24 февраля 2020

В моем фрейме данных есть value столбец, содержащий > или <, и я хочу удалить их.

Это мой код:

df
df1= df.filter((col("value").contains('>') | col("value").contains('<')))
df2= df.filter(~(col("value").contains('>') | col("value").contains('<')))
print(df.count())
print(df1.count())
print(df2.count())

My result:
3900000
202
3600000

Мои исключения:

df.count() = df1.count() + df2.count()

Но это не так. В чем здесь проблема?

1 Ответ

1 голос
/ 24 февраля 2020

Это, безусловно, вызвано нулевыми значениями в столбце value.

df.count() подсчитывает все строки в кадре данных и нули. Но когда вы используете contains в фильтре, нулевые значения пропускаются.

Пример :

data = [("value1_>", ), ("value2_>", ), ("value3_<",), ("value4",), (None,)]
df = spark.createDataFrame(data, ['value']) 

df1 = df.filter((col("value").contains('>') | col("value").contains('<')))
df2 = df.filter(~(col("value").contains('>') | col("value").contains('<')))
print(df.count())
print(df1.count())
print(df2.count())

#5
#3
#1
...