所以我没有多少使用lambda函数,我的教授正在推动我们使用它们,所以我有点挣扎。
我在Pyspark工作,我需要检查三个单词中的一个是否排成一行并计算它们出现的次数。这是我目前的尝试:
lines = sc.textFile("File")
counts = lines.filter(lambda line: "x" or "y" or "z" in line.lower())
counts.count()
当我这样做时,计数等于不正确的总行数。
非常感谢任何帮助。
答案 0 :(得分:1)
问题与使用lambdas无关。问题是您使用错误的语法来测试多个字符串。你不能在每个字符串之间放置or
,你需要在比较之间做到这一点。
counts = lines.filter(lambda line: "x" in line.lower() or "y" in line.lower() or "z" in line.lower())
为简化起见,您可以使用any
counts = lines.filter(lambda line: any(x in line.lower() for x in ["x", "y", "z"]))
答案 1 :(得分:0)
问题是"x" or "y" or "z" in line.lower()
总是True
。 Python中的任何非空字符串都是'Trueish',而布尔表达式True or ...
始终是True
,无论True
后面是什么。
更好的方法:使用Python的any
lines = sc.textFile("File")
counts = lines.filter(lambda line: any(c in line.lower() for c in ["x", "y", "z"]))
counts.count()