我的hdfs文件路径包含我想在spark中访问的元数据,即以下内容:
sc.newAPIHadoopFile("hdfs://.../*"), ...)
.map( rdd => /* access hdfs path here */ )
在hadoop中,我可以访问整个split-through的路径 FileSplit.getPath()
. 在spark中我能做什么类似的事情吗,或者我必须将路径字符串附加到扩展表中的每个rdd元素吗 NewHadoopRDD
,我认为这可能相当昂贵?
1条答案
按热度按时间iqih9akk1#
在提供给map()方法的闭包中,没有可用的元数据/执行上下文信息。
你可能想要的是
然后你可以做一些像
更新以前的解决方案不提供hdfs文件名。您可能需要执行以下操作:
创建扩展fileinputformat的自定义inputformat
创建一个定制的recordreader,为每一行输出与inputsplit关联的文件,然后输出每一行的实际值
在sparkMap器中,您将解析出现在包含hdfs文件名的第一个字段,Map器的其余部分保持不变