【问题标题】:Pyspark filter operation on DstreamDstream 上的 Pyspark 过滤器操作
【发布时间】:2017-02-10 05:40:40
【问题描述】:

我一直在尝试扩展网络字数,以便能够根据某些关键字过滤行

我正在使用 spark 1.6.2

from __future__ import print_function

import sys

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print("Usage: network_wordcount.py <hostname> <port>", file=sys.stderr)
        exit(-1)
    sc = SparkContext(appName="PythonStreamingNetworkWordCount")
    ssc = StreamingContext(sc, 5)

    lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))
    counts = lines.flatMap(lambda line: line.split(" ")).filter("ERROR")
    counts.pprint()

    ssc.start()
    ssc.awaitTermination()

我已经尝试了所有的变化,

我几乎总是得到错误,我无法应用类似的功能

pprint/show/take/collect on TransformedDStream

。我在 Dstream 行上使用了带有 foreachRDD 的转换,并带有一个函数来检查使用本机 python 字符串方法,这也失败了(实际上,如果我在程序中的任何地方使用 print,spark-submit 就会出现 - 没有报告错误。

我想要的是能够过滤传入的 Dstreams 关键字如“错误”| “警告”等并将其输出到标准输出或标准错误。

【问题讨论】:

    标签: pyspark dstream


    【解决方案1】:

    我想要的是能够过滤传入的 Dstreams 关键字如“错误”| “WARNING”等并输出到stdout或stderr。

    那么你不想打电话给flatMap,因为这会将你的行分成单独的标记。相反,您可以将该调用替换为对filter 的调用,以检查该行是否包含"error"

    lines = ssc.socketTextStream(sys.argv[1], int(sys.argv[2]))
    errors = lines.filter(lambda l: "error" in l.lower())
    errors.pprint()
    

    【讨论】:

    • 谢谢@dfernig 我已经接受了答案。我以为我是在逐字比较 split.filter 的“错误”:) 我有一个后续问题,我已经在这里发布了,如果可以看看吗? link
    猜你喜欢
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多