【发布时间】:2016-09-23 04:11:24
【问题描述】:
我从一个包含 url 列表的文件中创建了 RDD:
url_data = sc.textFile("url_list.txt")
现在我正在尝试使用包含“net.com”的所有行创建另一个 RDD,并且此字符串以非数字或字母符号开头。我的意思是包含带有 .net.com 或 \tnet.com 的行,排除 internet.com 或 cnet.com。
filtered_data = url_data.filter(lambda x: '[\W]net\.com' in x)
但是这条线没有给出任何结果。 如何使 pyspark shell 与正则表达式一起使用?
【问题讨论】:
-
'[\W]net\.com' in '.net.com'在 python 中返回 False。所以,这是一个 python 问题而不是 pyspark 问题 -
知道什么是正确的正则表达式吗?
-
\.+[a-zA-Z]+\.com 看起来像你想要的正则表达式命令(在这里测试:regexr.com)。但它并没有像你需要的那样无缝集成到 python 中。看起来您可以在 SQL 查询中使用它(例如:stackoverflow.com/questions/34952985/…)
-
@lacerated:你试过
r"\Wnet\.com"吗?这也会引发任何错误吗?实际上,正则表达式[\W]net\.com在 Python 中运行良好:ideone.com/kx8U3V -
@WiktorStribiżew:是的,
r"\Wnet\.com"也试过了。当我尝试执行像filtered_data.take(1)这样的操作时,我没有收到任何错误,只是一个空字符串[]。如果我尝试filtered_data.first(),它会说:ValueError: RDD is empty。想知道我是否需要导入一些 pyspark 模块以使 reg 表达式在 spark 中工作,例如 python 中的import re。如果我只做filtered_data = url_data.filter(lambda x: 'net.com' in x),它会过滤得很好,但我会得到我不需要的额外行。