仅映射spark中的作业(vs hadoop streaming)

时间:2015-11-22 09:00:37

标签: python hadoop apache-spark pyspark hadoop-streaming

我有一个函数process_line,它从输入格式映射到输出格式

某些行已损坏,需要忽略。

我成功运行此代码作为python流媒体作业:

for input_line in sys.stdin:
    try:
        output_line=process_line(input_line.strip())
        print (output_line)
    except:
        sys.stderr.write('Error with line: {l}\n'.format(l=input_line))
        continue

如何在pyspark中运行等效代码? 这就是我试过的:

input = sc.textFile(input_dir, 1)
output=lines.map(process_line)
output.saveAsTextFile(output_dir)

如何跟踪损坏的线路并统计其数量?

1 个答案:

答案 0 :(得分:2)

您尝试将文本文件只读取到一个分区,这会导致您的作业运行缓慢,因为您基本上放弃了并行性。

尝试这样做:

input = sc.textFile(input_dir)
output = lines.map(process_line)
output.saveAsTextFile(output_dir)

对于损坏的行,您可以在process_line函数中使用try-except机制,也可以将有问题的行写入某个日志文件,或者尝试改写其他逻辑。