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

hadoop1版本中提供了获取文件名的功能,就是在map阶段可以获取每一行记录属于哪个文件,可以得到这个文件名,代码如下:

Java代码 

 收藏代码

  1. //获取文件名  
  2. InputSplit inputSplit=(InputSplit)context.getInputSplit();  
  3. String filename=((FileSplit)inputSplit).getPath().getName();  


这是hadoop1版本提供的方法。 

对于spark也可以实现这个功能,使用的方式是本地测试的代码,spark在本地执行的,代码如下:

Java代码 

 收藏代码

  1. object Mytest3 {  
  2.   def main(args: Array[String]): Unit = {  
  3.     val conf=new SparkConf  
  4.     conf.setMaster("local[2]").setAppName("mytest")  
  5.     System.setProperty("hadoop.home.dir","E:\\hadoop2\\hadoop-2.6.0")  
  6.     val sc=new SparkContext(conf)  
  7.           
  8.     val fileRDD=sc.hadoopFile[LongWritable, Text, TextInputFormat]("C:\\sparksplit\\*")  
  9.       
  10.     val hadoopRdd = fileRDD.asInstanceOf[HadoopRDD[LongWritable, Text]]  
  11.       
  12.     val fileAndLine = hadoopRdd.mapPartitionsWithInputSplit((inputSplit:InputSplit,iterator:Iterator[(LongWritable, Text)]) =>{  
  13.       val file = inputSplit.asInstanceOf[FileSplit]  
  14.       iterator.map(x=>{file.getPath.toString()+"\t"+x._2})  
  15.     }   
  16.     )  
  17.       
  18.     fileAndLine.foreach(println)  
  19.   }  
  20. }  


这里要注意的是,引入的jar包不要错,错误的话,方法就会报错。引入的jar包是下面的:

Java代码 

 收藏代码

  1. import cn.wjpt.AuditLogManager  
  2. import org.apache.spark.SparkContext  
  3. import org.apache.spark.SparkContext._  
  4. import org.apache.spark.SparkConf  
  5. import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat  
  6. import org.apache.hadoop.io.Text  
  7. import org.apache.hadoop.io.LongWritable  
  8. import org.apache.spark.rdd.HadoopRDD  
  9. import org.apache.hadoop.mapred.InputSplit  
  10. import org.apache.hadoop.mapred.FileSplit  
  11. import org.apache.hadoop.mapred.TextInputFormat  



这样就搞定了。

转载于:https://my.oschina.net/sniperLi/blog/804658

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值