Заменить «None» на NULL в искровом фрейме в Jupyter Notebook - PullRequest
0 голосов
/ 29 сентября 2018

Я испытываю трудности при попытке заменить каждый экземпляр "None" в кадре данных spark на нули.

Моя назначенная задача требует от меня заменить "None" на Spark Null.

И когда я попытался использовать:

data_sdf = data_sdf.na.fill("None", Seq("blank"))

, это не удалось.Любые предложения о том, как мне решить эту проблему?

Это мой примерный кадр данных искры, с которым мне необходимо работать -

+--------------------+---------+---------+---------+---------+---------+---------+---------+
|         business_id|   monday|  tuesday|wednesday| thursday|   friday| saturday|   sunday|
+--------------------+---------+---------+---------+---------+---------+---------+---------+
|FYWN1wneV18bWNgQj...|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|     None|     None|
|He-G7vWjzVUysIKrf...| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-16:0| 8:0-16:0|     None|
|KQPW8lFf1y5BT2Mxi...|     None|     None|     None|     None|     None|     None|     None|

Ответы [ 2 ]

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

Я думаю, что ни одно из значений не сохраняется как строковое значение в вашей df.Вы можете легко заменить его нулевым значением.Если вы хотите, вы также можете заполнить их пустым значением

>>> data = sc.parallelize([
...     ('FYWN1wneV18bWNgQj','7:30-17:0','7:30-17:0','7:30-17:0','7:30-17:0','7:30-17:0','None','None'),
...     ('He-G7vWjzVUysIKrf','9:0-20:0','9:0-20:0','9:0-20:0','9:0-20:0','9:0-16:0','8:0-16:0','None'),
...     ('KQPW8lFf1y5BT2Mxi','None','None','None','None','None','None','None')
...     ])
>>> 
>>> cols = ['business_id','monday','tuesday','wednesday',' thursday','friday','saturday','sunday']
>>> 
>>> df = spark.createDataFrame(data, cols)
>>> 
>>> df.show()
+-----------------+---------+---------+---------+---------+---------+--------+------+
|      business_id|   monday|  tuesday|wednesday| thursday|   friday|saturday|sunday|
+-----------------+---------+---------+---------+---------+---------+--------+------+
|FYWN1wneV18bWNgQj|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|    None|  None|
|He-G7vWjzVUysIKrf| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-16:0|8:0-16:0|  None|
|KQPW8lFf1y5BT2Mxi|     None|     None|     None|     None|     None|    None|  None|
+-----------------+---------+---------+---------+---------+---------+--------+------+

>>> df.replace('None',None).show()
+-----------------+---------+---------+---------+---------+---------+--------+------+
|      business_id|   monday|  tuesday|wednesday| thursday|   friday|saturday|sunday|
+-----------------+---------+---------+---------+---------+---------+--------+------+
|FYWN1wneV18bWNgQj|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|    null|  null|
|He-G7vWjzVUysIKrf| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-16:0|8:0-16:0|  null|
|KQPW8lFf1y5BT2Mxi|     null|     null|     null|     null|     null|    null|  null|
+-----------------+---------+---------+---------+---------+---------+--------+------+

>>> df.replace('None',None).na.fill('').show()
+-----------------+---------+---------+---------+---------+---------+--------+------+
|      business_id|   monday|  tuesday|wednesday| thursday|   friday|saturday|sunday|
+-----------------+---------+---------+---------+---------+---------+--------+------+
|FYWN1wneV18bWNgQj|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|7:30-17:0|        |      |
|He-G7vWjzVUysIKrf| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-20:0| 9:0-16:0|8:0-16:0|      |
|KQPW8lFf1y5BT2Mxi|         |         |         |         |         |        |      |
+-----------------+---------+---------+---------+---------+---------+--------+------+
0 голосов
/ 29 сентября 2018

Я не знаю, есть ли прямой API, например, fillna.Но мы можем достичь

from pyspark.sql import Row

def replace_none_with_null(r):
    return Row(**{k: None if v == "None" else v for k, v in r.asDict().iteritems()})

# data_sdf is ur dataframe
new_df = data_sdf.rdd.map(lambda x: replace_none_with_null(x)).toDF()
new_df.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...