我必须处理的文件夹中有很多子目录。我已经决定找到linux实用程序来查找所有文件,比如
git checkout master
git cherry-pick a43kbjhl
现在我必须将stdout数据作为输入提供给spark脚本,如下面的
find . -name *.gz -exec zcat {} \;
spark是否可以读取stdin数据(比如简单的python)。请至少给出一些例子或方法吗?
答案 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文件。