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
这样就搞定了。
分享到:
相关推荐
文件名: spark-3.4.1-bin-hadoop3.tgz 这是 Apache Spark 3.4.1 版本的二进制文件,专为与 Hadoop 3 配合使用而设计。Spark 是一种快速、通用的集群计算系统,用于大规模数据处理。这个文件包含了所有必要的组件,...
包含常见大数据技术的资料和视频,例如 hadoop2.x、hive、hbase、flume、storm、spark等,以及mongodb、redis数据库资料等。资源需要下载,解压密码见文件名
包含常见大数据技术的资料和视频,例如 hadoop2.x、hive、hbase、flume、storm、spark等,以及mongodb、redis数据库资料等。资源需要下载,解压密码见文件名
有效地使用此类集群需要使用分布式文件系统,例如Hadoop分布式文件系统(HDFS)和相应的计算模型,例如Hadoop,MapReduce和Spark。 在本课程中,这是Data Science MicroMasters程序的一部分,您将学习大规模并行计算...
入门要运行此应用程序: 配置输入输出路径以及 gtf 文件名: 以独立模式启动 spark 1.2.1(为 Hadoop 2.4 构建): 打开一个 sbt 控制台: $ sbt 在要发送到 Spark 的 sbt 控制台程序集 jar 中: $组装使用 Spark ...
5、统一命名空间:Alluxio可以通过挂载功能实现不同存储系统之间的高效数据管理。并且,透明命名机制在持久化存储对象到底层存储系统时可以保留存储对象的文件名和目录层次结构。 6、Web UI:用户可以通过Web UI浏览...
5、统一命名空间:Alluxio可以通过挂载功能实现不同存储系统之间的高效数据管理。并且,透明命名机制在持久化存储对象到底层存储系统时可以保留存储对象的文件名和目录层次结构。 6、Web UI:用户可以通过Web UI浏览...
5、统一命名空间:Alluxio可以通过挂载功能实现不同存储系统之间的高效数据管理。并且,透明命名机制在持久化存储对象到底层存储系统时可以保留存储对象的文件名和目录层次结构。 6、Web UI:用户可以通过Web UI浏览...