//获取文件名 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
这样就搞定了。