spark实现hadoop中获取文件名的功能

hadoop1版本中提供了获取文件名的功能,就是在map阶段可以获取每一行记录属于哪个文件,可以得到这个文件名,代码如下:
//获取文件名
InputSplit inputSplit=(InputSplit)context.getInputSplit();
String filename=((FileSplit)inputSplit).getPath().getName();

这是hadoop1版本提供的方法。

对于spark也可以实现这个功能,使用的方式是本地测试的代码,spark在本地执行的,代码如下:
object Mytest3 {
def main(args: Array[String]): Unit = {
val conf=new SparkConf
conf.setMaster("local[2]").setAppName("mytest")
System.setProperty("hadoop.home.dir","E:\\hadoop2\\hadoop-2.6.0")
val sc=new SparkContext(conf)

val fileRDD=sc.hadoopFile[LongWritable, Text, TextInputFormat]("C:\\sparksplit\\*")

val hadoopRdd = fileRDD.asInstanceOf[HadoopRDD[LongWritable, Text]]

val fileAndLine = hadoopRdd.mapPartitionsWithInputSplit((inputSplit:InputSplit,iterator:Iterator[(LongWritable, Text)]) =>{
val file = inputSplit.asInstanceOf[FileSplit]
iterator.map(x=>{file.getPath.toString()+"\t"+x._2})
}
)

fileAndLine.foreach(println)
}
}

这里要注意的是,引入的jar包不要错,错误的话,方法就会报错。引入的jar包是下面的:
import cn.wjpt.AuditLogManager
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat
import org.apache.hadoop.io.Text
import org.apache.hadoop.io.LongWritable
import org.apache.spark.rdd.HadoopRDD
import org.apache.hadoop.mapred.InputSplit
import org.apache.hadoop.mapred.FileSplit
import org.apache.hadoop.mapred.TextInputFormat


这样就搞定了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值