Я создал фрейм данных как:
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
для всех значений.
Есть ли простой способ отфильтровать эти данные?Любая помощь будет высоко ценится.Спасибо