Фильтрация Spark Dataframe - PullRequest
       7

Фильтрация Spark Dataframe

0 голосов
/ 11 декабря 2018

Я создал фрейм данных как:

ratings = imdb_data.sort('imdbRating').select('imdbRating').filter('imdbRating is NOT NULL')

После выполнения ratings.show(), как показано ниже, я вижу, что поле imdbRating имеет смешанный тип данных, такой как случайные строки, фильмназвание, URL фильма и фактические рейтинги.Таким образом, грязные данные выглядят так:

+--------------------+
|          imdbRating|
+--------------------+
|Mary (TV Episode...|
| Paranormal Activ...|
| Sons (TV Episode...|
|        Spion (2011)|
| Winter... und Fr...|
| and Gays (TV Epi...|
| grAs - Die Serie...|
| hat die Wahl (2000)|
|                 1.0|
|                 1.3|
|                 1.4|
|                 1.5|
|                 1.5|
|                 1.5|
|                 1.6|
|                 1.6|
|                 1.7|
|                 1.9|
|                 1.9|
|                 1.9|
+--------------------+
only showing top 20 rows

Есть ли в любом случае, я могу отфильтровать нежелательные строки и все просто получить оценки?Я попытался использовать UDF как:

 ratings_udf = udf(lambda imdbRating: imdbRating if isinstance(imdbRating, float)  else None)

и попытался назвать его следующим образом:

ratings = imdb_data.sort('imdbRating').select('imdbRating')
filtered = rating.withColumn('imdbRating',ratings_udf(ratings.imdbRating))

Проблема с вышесказанным заключается в том, что он пытался вызвать udf в каждой строке, в каждой строкефрейм данных отображается на тип Row и, следовательно, возвращает None для всех значений.

Есть ли простой способ отфильтровать эти данные?Любая помощь будет высоко ценится.Спасибо

1 Ответ

0 голосов
/ 11 декабря 2018

Наконец-то я смог ее решить. Проблема заключалась в том, что были поврежденные данные, и не все поля присутствовали.Во-первых, я пытался использовать панды, читая CSV-файлы в пандах как:

pd_frame = pd.read_csv('imdb.csv', error_bad_lines=False)

Это пропускало / отбрасывало поврежденные строки, которые имели меньше столбцов, чем фактические.Я попытался прочитать приведенный выше кадр данных panda, pd_frame, для запуска, используя:

imdb_data= spark.createDataFrame(pd_frame)

, но получил ошибку из-за несоответствия при выводе схемы.Оказывается, что у spark csv reader есть нечто похожее, которое отбрасывает поврежденные строки как:

imdb_data = spark.read.csv('imdb.csv', header='true', mode='DROPMALFORMED')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...