【发布时间】:2019-04-15 23:33:57
【问题描述】:
我想过滤掉从数据集创建的 RDD,基于 行长使用: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
这里的第 4 列是类别。数据文件中的一些行 不包含此字段,因此长度较短。这促使 我根据这个标准过滤掉数据集并进一步形成 具有类别的数据集上的 RDD。
我已尝试从数据集创建初始 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 中的任何内容。任何人都可以 请帮忙。
【问题讨论】:
-
您可能需要先收集()然后再计数()。像
newinput=input.filter(lambda x: len(x)>3).collect()& 然后newinput.count() -
你能上传文本文件吗?
-
@St1id3r 我尝试了您的解决方案,但出现以下错误:
>>> newinput=input.filter(lambda x: len(x)>3).collect() >>> newinput.count() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: count() takes exactly one argument (0 given)
标签: python apache-spark filter pyspark rdd