Как я могу отфильтровать RDD по длине линий в наборе данных.? - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу отфильтровать СДР, созданный из набора данных на основе длина линии Использование: Pyspark shell

Мой файл данных выглядит так

> fzDTn342L3Q   djjohnnykey 599 Music   185 1005    3.67    3   1   KDrJSNIGNDQ MacjQFNVLlQ oZ6f2vaH858 fYSjMDNa4S8 JUatPzf_eSc QfBFl7kU35c rG-rQ-YGdSA kOq6sFmoUr0 IRj1IABVBis AVsZ0VH3eN4 r1pS_4qouUc YgaNW1KRgK4 ZlGdVR7mBy4 nKFLE3DX4OQ EtQjN6CQeCc afe-0VY4YiI ekV5NseEdy8 IQs6CrER5fY jTLcoIxMI-E yfvW1ITcMpM
> 
> kOq6sFmoUr0   djjohnnykey 599 Music   113 992 0   0   1   MacjQFNVLlQ fYSjMDNa4S8 4vso1y_-cvk 8BwAX6YBx3E QeUQyf8H7vM jmc21-Nhewg hZUU2-UBaGk SaLaotssH0w PUlcrBaYpwI tjIK2xop4L0 BNlL15OYnFY _pzP7OLInjk 4daGJ6TMcp4 _8jM9R-1yRk KDrJSNIGNDQ oZ6f2vaH858 JUatPzf_eSc QfBFl7kU35c rG-rQ-YGdSA fzDTn342L3Q

Здесь четвертый столбец - категория. Некоторые строки в файле данных не содержит этого поля и, следовательно, меньше по длине. Это мотивирует мне отфильтровать набор данных на основе этого критерия и дальнейшей формы СДР для этого набора данных, который имеет категорию.

Я попытался создать начальный RDD из набора данных.

>>> data="/Users/sk/Documents/BigData/0222/0.txt"
>>> input = sc.textFile(data)

Теперь я делю по табу и сохраняю в строках RDDS

>>> lines = input.map(lambda x: (str(x.split('\t'))))

После этого я хочу отфильтровать строки, длина которых меньше 3.

>>> data="/Users/sk/Documents/BigData/0222/1.txt"
>>> input = sc.textFile(data)
>>> lines = input.map(lambda x: (str(x.split('\t'))))
>>> lines.count()
3169

>>> newinput=input.filter(lambda x: len(x)>3)
>>> newinput.count()
3169

После этого это ничего не меняет в моем rdd. Может кто-нибудь пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 апреля 2019

Несколько вещей с вашим решением.Не уверен, что рекомендуется использовать RDD, учитывая, что это Python (вы можете переосмыслить его).Использование Dataframes было бы проще и эффективнее.

>>> x =  spark.read.option("sep","\t").csv("/data/youtubedata.txt")
>>> x.count()
4100
>>> from pyspark.sql.functions import length
>>> from pyspark.sql.functions import col, size
>>> x.filter(length(col("_c3")) > 3).count()
4066
>>> x.filter(x._c3.isNull()).count()
34
>>> x.filter(x._c3.isNotNull()).count()
4066

Обновление: обновлено с учетом.

...