如何将stdin数据输入到spark脚本作为输入

时间:2017-02-13 07:04:15

标签: python linux apache-spark pyspark

我必须处理的文件夹中有很多子目录。我已经决定找到linux实用程序来查找所有文件,比如

git checkout master
git cherry-pick a43kbjhl

现在我必须将stdout数据作为输入提供给spark脚本,如下面的

find . -name *.gz -exec zcat {} \;

spark是否可以读取stdin数据(比如简单的python)。请至少给出一些例子或方法吗?

2 个答案:

答案 0 :(得分:0)

也许试试这个:

import subprocess
file_data=subprocess.call(['find', '.', '-name','*.gz',.....])

答案 1 :(得分:0)

您可以使用的技巧是通过管道进程传递参数。参考文档

  

pipe(command,env = None,checkCode = False)   将由管道元素创建的RDD返回到分叉的外部进程。

>>> sc.parallelize(['1', '2', '', '3']).pipe('cat').collect()`
[u'1', u'2', u'', u'3']`

所以你可以在你的剧本中有这样的东西:

test = sc.parallelize([1])
data = test.pipe("find . -name *.gz -exec zcat {}")

然而,这不是很有效。如果您只想读取目录中的所有gzip文件,只需将路径传递给您的文件,如

data = sc.textFile("/path/to/files/*gz")
data.take(3) ## take a sample of records

就这么简单。也适用于bz2文件。