你好,游客 登录
背景:
阅读新闻

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

[日期:2016-06-07] 来源:字母哥的博客  作者: [字体: ]

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

spark

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.   } 


这里要注意的是,引入的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  




收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论    (0)
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款