真正开发大数据之前,本人折腾过hadoop,spark组件,其中把之前公司的日志放到hadoop 和hive里面去读写.但实际上,真正开发spark程序,遇到的坑,是十分多的.
本篇主要介绍spark读写hadoop.hadoop的读写,有java方式,也有scala方式.
虽scala可以嵌入java代码,并不意味着直接把java 操作工具类放到scala程序就行了.
hadoop 一般放的都是文件,我们的是csv文件.读取csv,然后对其中的行列数据做计算,生成新的列数据.
这里用的scala 版本是2.11.7.
spark 内置一些读写及计算api,也就是transformation 和 action操作.
比如读取List:
val testList : List[String] = List[String]("1223","123","3435")
val sc : SparkContext = sparkSeesion.sparkContext
val rddtest = sc.makeRDD(testList)
rddtest.foreach(x=>println(x))
//
val rdd2 = rdd.map(x => x.toString())
//map里面有函数
val rdd3 = rdd.map(x=>ComputeDate(x.toString()))
spark api 的精华是transformation 操作,这几十个transformation 函数,会将数据在集群内存里面做各种转换以满足需求,效率非常高.
最后生成的结果数据才转到driver端,而这是在action操作之后执行的.
本人理解,这可能是spark效率比hadoop的mapreduce高的地方.spark将数据分成许多分片,而这些分片可以同时执行,虽然如此,数据的前后顺序,在内部,却是有序的.
spark读取csv代码还是比较简洁的:
val conf = new SparkConf().setAppName("ReadCsvFile").setMaster("spark://10.0.0.1:7077").set("spark.driver.host","10.0.0.1").setJars(Seq(""))
val sc = new SparkContext(conf)
val inputFile = sc.textFile("hdfs://10.0.0.1:9000/res/csvFile.csv").cache()
这里,Seq(“”) 里面要加载该项目程序编译处理的jar包:
D:\IdeaProjects\scalaProject03\out\artifacts\scalaProject03\scalaProject03.jar
还可以使用df方式:
val spark = SparkSession.builder.master("local[1]").appName("Spark CSV Reader").getOrCreate;
val df = spark.read

本文探讨了Spark读写Hadoop的常见操作,包括Scala与Java方式的对比,重点介绍了DataFrame的使用和优化策略。通过示例代码展示了如何高效地处理CSV文件,并提出在开发中遇到的问题,如如何利用集群资源、字段动态读写、减少Action操作次数以及在不同场景下选择合适的数据处理方式。

2585

被折叠的 条评论
为什么被折叠?



