#apache-spark #pyspark #apache-spark-sql
Вопрос:
Это набор данных, и я пытаюсь заполнить все нулевые значения»*****».
data.na.fill('*****').show()
В идеале это утверждение должно заполнять все нули звездочкой. Но заменяются только нули в колонке «Город». Не знаю почему.
Комментарии:
1. Глядя на ваше изображение, есть только
city
столбец строкового типа, остальные-цифры. и ваше значение заполнения является строкой, поэтому заменяется только столбец «город»
Ответ №1:
Заполнение зависит от схемы вашего базового набора данных.
Как говорится в документе — fillna(value, subset=None)
значение должно быть сопоставлением имени столбца (строки) со значением замены. Значение замены должно быть значением int, с плавающей точкой, логическим значением или строкой.
Ниже приведен пример, демонстрирующий то же самое
Подготовка Данных
input_str = """
|1 |704 |STANDARD|null |PR |30100
|2 |null |null |PASEO COSTA DEL SUR|PR |null
|3 |709 |null |BDA SAN LUIS |PR |3700
|4 |null |UNIQUE |CINGULAR WIRELESS |TX |84000
|5 |76177 |STANDARD|null |TX |null
""".split("|")
input_values = list(map(lambda x: x.strip() if x.strip() != 'null' else None, input_str[1:]))
n = len(input_values)
cols = ['id','zipcode','type','city','state','population']
input_list = [tuple(input_values[i:i 6]) for i in range(0,n,6)]
sparkDF = sql.createDataFrame(input_list, cols)
sparkDF.show()
--- ------- -------- ------------------- ----- ----------
| id|zipcode| type| city|state|population|
--- ------- -------- ------------------- ----- ----------
| 1| 704|STANDARD| null| PR| 30100|
| 2| null| null|PASEO COSTA DEL SUR| PR| null|
| 3| 709| null| BDA SAN LUIS| PR| 3700|
| 4| null| UNIQUE| CINGULAR WIRELESS| TX| 84000|
| 5| 76177|STANDARD| null| TX| null|
--- ------- -------- ------------------- ----- ----------
root
|-- id: string (nullable = true)
|-- zipcode: string (nullable = true)
|-- type: string (nullable = true)
|-- city: string (nullable = true)
|-- state: string (nullable = true)
|-- population: string (nullable = true)
Филльна
Заполнение напрямую без приведения , как и в схеме string
, заменит все нулевые значения на ***
sparkDF = sparkDF.na.fill('****')
sparkDF.show()
--- ------- -------- ------------------- ----- ----------
| id|zipcode| type| city|state|population|
--- ------- -------- ------------------- ----- ----------
| 1| 704|STANDARD| ****| PR| 30100|
| 2| ****| ****|PASEO COSTA DEL SUR| PR| ****|
| 3| 709| ****| BDA SAN LUIS| PR| 3700|
| 4| ****| UNIQUE| CINGULAR WIRELESS| TX| 84000|
| 5| 76177|STANDARD| ****| TX| ****|
--- ------- -------- ------------------- ----- ----------
Кастинг и заполнение
Приведение population
и id
к двойному типу и заполнение 0
заполняет нулевые значения в DoubleType
столбцах до 0
sparkDF = sparkDF.withColumn('zipcode',F.col('zipcode').cast(DoubleType()))
.withColumn('population',F.col('population').cast(DoubleType()))
sparkDF = sparkDF.na.fill(0)
sparkDF.show()
--- ------- -------- ------------------- ----- ----------
| id|zipcode| type| city|state|population|
--- ------- -------- ------------------- ----- ----------
| 1| 704.0|STANDARD| null| PR| 30100.0|
| 2| 0.0| null|PASEO COSTA DEL SUR| PR| 0.0|
| 3| 709.0| null| BDA SAN LUIS| PR| 3700.0|
| 4| 0.0| UNIQUE| CINGULAR WIRELESS| TX| 84000.0|
| 5|76177.0|STANDARD| null| TX| 0.0|
--- ------- -------- ------------------- ----- ----------