文章目录
- 读取 txt 文件
- 读取 csv 文件
- 读取 MySQL 数据库表
- 读取 Json 文件
- 中文输出乱码
前提: 可以参考文章 SpringBoot 接入 Spark
- SpringBoot 已经接入 Spark
- 已配置 JavaSparkContext
- 已配置 SparkSession
@Resource private SparkSession sparkSession; @Resource private JavaSparkContext javaSparkContext;
读取 txt 文件
测试文件 word.txt
java 代码
- textFile:获取文件内容,返回 JavaRDD
- flatMap:过滤数据
- mapToPair:把每个元素都转换成一个
类型的对象,如 <123,1>,<456,1> - reduceByKey:对相同key的数据集进行预聚合
public void testSparkText() { String file = "D:\\TEMP\\word.txt"; JavaRDD
fileRDD = javaSparkContext.textFile(file); JavaRDD wordsRDD = fileRDD.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD wordAndOneRDD = wordsRDD.mapToPair(word -> new Tuple2<>(word, 1)); JavaPairRDD wordAndCountRDD = wordAndOneRDD.reduceByKey((a, b) -> a + b); //输出结果 List > result = wordAndCountRDD.collect(); result.forEach(System.out::println); } 结果得出,123 有 3 个,456 有 2 个,789 有 1 个
读取 csv 文件
测试文件 testcsv.csv
java 代码
public void testSparkCsv() { String file = "D:\\TEMP\\testcsv.csv"; JavaRDD
fileRDD = javaSparkContext.textFile(file); JavaRDD wordsRDD = fileRDD.flatMap(line -> Arrays.asList(line.split(",")).iterator()); //输出结果 System.out.println(wordsRDD.collect()); } 输出结果
读取 MySQL 数据库表
- format:获取数据库建议是 jdbc
- option.url:添加 MySQL 连接 url
- option.user:MySQL 用户名
- option.password:MySQL 用户密码
- option.dbtable:sql 语句
- option.driver:数据库 driver,MySQL 使用 com.mysql.cj.jdbc.Driver
-
public void testSparkMysql() throws IOException { Dataset
jdbcDF = sparkSession.read() .format("jdbc") .option("url", "jdbc:mysql://192.168.140.1:3306/user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai") .option("dbtable", "(SELECT * FROM xxxtable) tmp") .option("user", "root") .option("password", "xxxxxxxxxx*k") .option("driver", "com.mysql.cj.jdbc.Driver") .load(); jdbcDF.printSchema(); jdbcDF.show(); //转化为RDD JavaRDD
rowJavaRDD = jdbcDF.javaRDD(); System.out.println(rowJavaRDD.collect()); }
也可以把表内容输出到文件,添加以下代码
List
list = rowJavaRDD.collect(); BufferedWriter bw; bw = new BufferedWriter(new FileWriter("d:/test.txt")); for (int j = 0; j < list.size(); j++) { bw.write(list.get(j).toString()); bw.newLine(); bw.flush(); } bw.close();
结果输出
读取 Json 文件
测试文件 testjson.json,内容如下
[{ "name": "name1", "age": "1" }, { "name": "name2", "age": "2" }, { "name": "name3", "age": "3" }, { "name": "name4", "age": "4" }]
注意:testjson.json 文件的内容不能带格式,需要进行压缩
java 代码
- createOrReplaceTempView:读取 json 数据后,创建数据表 t
- sparkSession.sql:使用 sql 对 t 进行查询,输出 age 大于 3 的数据
public void testSparkJson() { Dataset
df = sparkSession.read().json("D:\\TEMP\\testjson.json"); df.printSchema(); df.createOrReplaceTempView("t"); Dataset
row = sparkSession.sql("select age,name from t where age > 3"); JavaRDD
rowJavaRDD = row.javaRDD(); System.out.println(rowJavaRDD.collect()); }
输出结果
中文输出乱码
测试文件 testcsv.csv
public void testSparkCsv() { String file = "D:\\TEMP\\testcsv.csv"; JavaRDD
fileRDD = javaSparkContext.textFile(file); JavaRDD wordsRDD = fileRDD.flatMap(line -> Arrays.asList(line.split(",")).iterator()); //输出结果 System.out.println(wordsRDD.collect()); } 输出结果,发现中文乱码,可恶
原因:textFile 读取文件没有解决乱码问题,但 sparkSession.read() 却不会乱码
解决办法:获取文件方式由 textFile 改成 hadoopFile,由 hadoopFile 指定具体编码
public void testSparkCsv() { String file = "D:\\TEMP\\testcsv.csv"; String code = "gbk"; JavaRDD
gbkRDD = javaSparkContext.hadoopFile(file, TextInputFormat.class, LongWritable.class, Text.class).map(p -> new String(p._2.getBytes(), 0, p._2.getLength(), code)); JavaRDD gbkWordsRDD = gbkRDD.flatMap(line -> Arrays.asList(line.split(",")).iterator()); //输出结果 System.out.println(gbkWordsRDD.collect()); } 输出结果
猜你喜欢
- 3天前(a级景区评定机构)全国A级旅游景区创建与提升培训班在敦煌市举办
- 3天前(从“见世面”到“内在需要”:在海南,追问旅行的意义)从“见世面”到“内在需要”:在海南,追问旅行的意义
- 3天前(三亚海棠湾君悦度假酒店)三亚海棠湾君悦酒店暑期夏令营悦趣海岛游招募中
- 3天前(杭州西湖区万怡酒店正式开业了吗)杭州西湖区万怡酒店正式开业
- 3天前(三亚太阳湾柏悦度假酒店)三亚太阳湾柏悦酒店携手ROSEONLY诺誓缔造浪漫七夕
- 3天前(瑞虎7plus2021款)重塑10万级SUV价值标杆,全新一代瑞虎7PLUS冠军版给你惊喜
- 3天前(罗马尼亚的匈牙利族自治)江苏赴匈牙利、罗马尼亚开展文旅交流推广活动
- 3天前(美诺酒店集团旗下臻选品牌m collection)美诺酒店集团启动盛橡品牌战略焕新 开启全球扩张新篇章
- 3天前(2025年安徽省“百场黄梅唱响百家景区”示范展示启动)2025年安徽省“百场黄梅唱响百家景区”示范展示启动
- 3天前(冬日生活还没安排?上抖音一键打包北方花式过冬精彩)冬日生活还没安排?上抖音一键打包北方花式过冬精彩
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章