Преобразовать пропущенные строковые значения в isNull в Pyspark - PullRequest
0 голосов
/ 30 апреля 2020

Я новичок в pyspark, и у меня есть набор данных, который я загружаю из CSV (в Glue). Есть один столбец code, где есть string и long.

df = glueContext.create_dynamic_frame.from_catalog(database="db", table_name="data_csv")
df.printSchema()

root
|-- code: choice
|    |-- long
|    |-- string

, и кажется, что pyspark видит пропущенные значения как string. Я нашел это, сгладив столбец как Как развернуть вложенный столбец Struct в несколько столбцов? .

df_flattened.show()

+---------+------+
|     long|string|
+---------+------+
|  9965213|  null|
|300870254|  null|
|  5607653|  null|
|  5798154|  null|
|   389954|  null|
|      572|  null|
|   951091|  null|

Я действительно хочу, чтобы весь столбец был string, но я не смог найти как сделать значения null (выше) действительными null значения, которые отображаются при использовании isnan. Также, когда я пытаюсь преобразовать весь столбец в string, и обнаруживаю, что ни одна из строк не является == 'null'.

df = (df
          .toDF()
          .withColumn('code', f.col('code').cast("string"))
     )

df.select('code').where(f.col('code') == 'null').count()

0

Какого типа эти значения null и как их преобразовать в «истинные» null значения (которые распознаются isNull())?

1 Ответ

0 голосов
/ 30 апреля 2020

Чтобы справиться с нулевыми значениями в pyspark, вы можете отфильтровать их, используя функцию isnull, или заменить их, используя na. Пример:

from pyspark.sql import functions as f
df.select([f.count(f.when(f.isnull(c), c)).alias(c) for c in df.columns])
#This will give you count of null values in each of your column

Если вы хотите заменить нулевые значения другими значениями, вы можете использовать

df.na.fill(yourValue)

Надеюсь, это поможет.

...