博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spark实现hadoop中获取文件名的功能
阅读量:6533 次
发布时间:2019-06-24

本文共 1460 字,大约阅读时间需要 4 分钟。

hot3.png

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

你可能感兴趣的文章
如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
查看>>
Asp.Net Core 轻松学-利用日志监视进行服务遥测
查看>>
LightSwitch社区资源搜集
查看>>
Android通讯录查询篇--ContactsContract.Data 二(续)
查看>>
IT人的自我导向型学习:开篇杂谈
查看>>
[原创]BizTalk动手实验系列目录
查看>>
HDU 4611Balls Rearrangement(思维)
查看>>
[LeetCode] Majority Element II
查看>>
minGW, cygwin, GnuWin32【C++的跨平台交叉编译问题】
查看>>
我的Dll(动态链接库)学习笔记(转)
查看>>
应用程序域
查看>>
有向图的拓扑排序算法JAVA实现
查看>>
HTML页面跳转的5种方法
查看>>
李洪强-C语言5-函数
查看>>
开源监控利器grafana
查看>>
Android获取当前时间与星期几
查看>>
jenkins2 multibranch
查看>>
Css定位-定位
查看>>
am335x 电容屏驱动添加。
查看>>
rhel-server-7.2-x86_64无法联网(VMware环境)
查看>>