java spark读写hdfs_Spark读取HDFS数据输出到不同的文件

最近有一个需求是这样的:原来的数据是存储在MySQL,然后通过Sqoop将MySQL的数据抽取到了HDFS集群上,抽取到HDFS上的数据都是纯数据,字段值之间以\t分隔,现在需要将这部分数据还原为json格式的,因为这样做的原因:一来是更清楚具体字段的含义;二来是后期的数据通过kafka直接消费存储到HDFS,存的就是json数据,所以为了所有存储数据格式一致,需要将历史数据进行转换。所以只能通过MR或者Spark进行一次数据清洗转换了。因为需要根据每条数据中的一个时间字段将数据存储到不同的文件中。比如一条纯数据如下:

1 2019-04-26 00:32:09.0 null true 1025890 10004515

那么需要根据第二个字段信息来将数据分别存储到不同的文件夹,分为4个时段,格式为:

/2019/04/26/00-06.txt,/2019/04/26/06-12.txt,/2019/04/26/12-18.txt,/2019/04/26/18-00.txt,

直接上spark代码:

import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat

import org.apache.spark.sql.SparkSession

/**

* spark版本将数据输出到不同文件

* create date:2019-07-16

* author:ly

*/

object OutputToMultiFileApp {

def main(args: Array[String]): Unit = {

val inputPath = args(0)

val outputPath = args(1)

//val inputPath = "D:\\bigdata_workspace\\gey\\3\\in.txt"

//val outputPath = "D:\\bigdata_workspace\\gey\\3\\out"

val spark = SparkSession.builder().appName("OutputToMultiFileApp").master("local[*]").getOrCreate()

val data =spark.sparkContext.textFile(inputPath).map(item => {

val splits = item.toString.split("\t")

val str = "{\"id\":\"" + splits(4) + "\",\"uid\":\"" + splits(5) + "\",\"createTime\":\"" + splits(1) + "\",\"epochs\":\"1\"}"

//将时间字段作为key,包装后的json作为value

(splits(1),str)

})

/**按Key保存到不同文件*/

data.saveAsHadoopFile(outputPath,

classOf[String],

classOf[String],

classOf[MyMultipleTextOutputFormat]

)

spark.stop()

}

}

class MyMultipleTextOutputFormat extends MultipleTextOutputFormat[Any, Any] {

//1)文件名:根据key生成我们自己的路径

override def generateFileNameForKeyValue(key: Any, value: Any, name: String): String ={

//2019-04-26 16:32:09.0

val splits: Array[String] = key.toString.split(" ")

//2019-04-26

val ymd: String = splits(0)

//16:32:09.0

val hms: String = splits(1)

//[2019,04,26]

val arr1: Array[String] = ymd.split("-")

//[16,32,09]

val arr2: Array[String] = hms.split(":")

var temp: String = ""

val h6: Int = 6

val h12: Int = 12

val h18: Int = 18

val h24: Int = 24

val h: Int = arr2(0).toInt

if(h >= 0 && h <=6) temp = "00-06"

if(h > h6 && h <= h12) temp = "06-12"

if(h > h12 && h <= h18) temp = "12-18"

if(h > h18 && h < h24) temp = "18-00"

val paths = arr1(0) + "/" + arr1(1) + "/" + arr1(2) + "/" + temp + ".txt"

paths

}

//2)文件内容:默认同时输出key和value。这里指定不输出key。

override def generateActualKey(key: Any, value: Any): String = {

null

}

}

上述代码直接在IDEA上运行,笔者是在win10上搞了一个比较小的文件测试,测试结果如下:

年份:

e41dc2b9e8c8

result1.png

月份:

e41dc2b9e8c8

result2.png

日期:

e41dc2b9e8c8

result3.png

最终数据:

e41dc2b9e8c8

result4.png

妥妥的成功了。。直接打包放到集群上运行。但是数据量大一些的话,好像会丢失数据,目前还不知道为啥。。。

欢迎大家留言讨论

内容将同步到微信公众号,欢迎关注微信公众号:LearnBigData

e41dc2b9e8c8

qrcode.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15个创意的电梯广告

如果你走进任何一个城市&#xff0c;几乎每一个地方有电梯&#xff0c;但是你发现具有创意的广告电梯了吗&#xff0c;分享给大家15个不同城市的创意的电梯广告&#xff0c;作为设计师可以帮助你 Accor Air Asia Becel Body World Coke Zero Consol Energy Fiat Punto Forklift…

揭秘全球开发最新趋势!JS开发者达1380万,C#超越PHP,Rust增长最快

文 | 白开水出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;研究公司 SlashData 最新发布的”State of the Developer Nation“第 20 版报告指出&#xff0c;全球开发者社区在过去六个月中的经历了巨大的增长。据估计&#xff0c;截至 2021 年第一季度&a…

怎样判断漂亮女孩是不是单身的?

全世界有3.14 % 的人已经关注了数据与算法之美不解风情的死理性派们在情感生活中不免会遇到这样悲催的一幕&#xff1a;偶然间遇到一位心仪的漂亮女孩&#xff0c;从此日思夜想&#xff0c;废寝忘食&#xff0c;开始了漫长的暗恋之旅。等到一日&#xff0c;在无尽的纠结中&…

java开源cad_寻找 AutoCAD 替代品,5款免费开源 CAD 软件推荐

FreeCADFreeCAD 是一种通用的3D CAD建模。完全开源(LGPL许可证)FreeCAD 直接的目的是在机械工程和产品设计&#xff0c;也适合在更广泛的用途&#xff0c;如建筑行业或其他工程专业&#xff0c;工程相关领域。FreeCAD 全平台通用&#xff0c;能完美工作在 Windows、Linux 和 ma…

快速弄懂陌生领域是一项“赚钱”的能力

大家好&#xff0c;我是Z哥。有时候&#xff0c;我们被动的需要去了解一个新行业或者领域。比如&#xff0c;工作需要、投资需要等等。在这个时候&#xff0c;你能不能快速弄懂一个行业的80%&#xff0c;成为一个内行就很关键了。毕竟时机可是很重要的。比如&#xff0c;你想了…

java弹窗 触发事件_关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法...

好久没见了在项目中遇到一个小小的需求&#xff0c;总结了一下&#xff01;详细我就不介绍了&#xff0c;相信大家用过的话&#xff0c;很了解。详见文档----------->http://element-cn.eleme.io/#/zh-CN/component/message-box#messagebox-dan-kuang项目需求——关于Elemen…

6年后再一次Hello World!这本书让你久等了!

移动互联网和手机智能化浪潮带来了全新的手机游戏模式。而随着手机游戏开发逐渐成熟&#xff0c;手机游戏开发门槛的降低&#xff0c;越来越多的开发者希望加入到这一行业中。Unity作为一款优秀的游戏引擎&#xff0c;为广大游戏开发者提供了高效、简洁的开发流程&#xff0c;使…

MATLAB图像处理与数字信号处理资料分享来袭

小天从大学开始接触数学建模&#xff0c;便开启资料收集功能。经过近几年的积累和沉淀&#xff0c;再加上对数学建模领域的深入研究&#xff0c;收集整理了丰富的数学建模资料&#xff0c;内容涵盖“MATLAB图像处理”&#xff0c;“数字信号处理与MATLAB实现”等。截止到今天&a…

java换水_java-交流灌水之谁是水王?

设计思想&#xff1a;水王是发帖和回帖最多的那个&#xff0c;总数会超过总贴数的一半还要多&#xff0c;我的思想是&#xff0c;当两个挨着的人发帖的id不同就进行抵消&#xff0c;最后剩下来的就是总数超过一半的“水王”的id;代码实现:package demo;public class text1 {sta…

数学学得好,才可以发现别人发现不了的挣钱良机

全世界有3.14 % 的人已经关注了数据与算法之美2011年&#xff0c;美国波士顿地区的一种彩票 “Cash WinFal”爆出了一个存在已久的漏洞。让人惊奇的是&#xff0c;一对 73 岁的夫妇已经利用这个漏洞赚了超过 600 万美元 。一时间风雨满城&#xff0c;马萨诸塞州也宣布要开始调查…

Async和Await异步编程的原理

1. 简介 从4.0版本开始.NET引入并行编程库&#xff0c;用户能够通过这个库快捷的开发并行计算和并行任务处理的程序。在4.5版本中.NET又引入了Async和Await两个新的关键字&#xff0c;在语言层面对并行编程给予进一步的支持&#xff0c;使得用户能以一种简洁直观的方式实现并行…

细数那些让人难以抗拒的经典数学书

如果有人不相信数学是简单的,那是因为他们没有意识到人生有多复杂。——冯诺依曼近期有关数学的好消息还是蛮多的&#xff0c;先有阿里巴巴举办全国数学竞赛&#xff0c;奖金百万&#xff0c;只为爱好数学的你。快来看看下面这些竞赛试题&#xff0c;我想应该难不倒我们的小伙伴…

java对jar包的复制_Java安全之jar包调试技巧

Java安全之jar包调试技巧调试程序首先还是创建一个工程&#xff0c;将jar包导入进来调试模式的参数启动中需要加入特定参数才能使用debug模式&#xff0c;并且需要开放调试端口JDK5-8:-agentlib:jdwptransportdt_socket,servery,suspendy,address5005JDK9&#xff1a;-agentlib…

一次Redis client组件性能分析

BeetleX也扩展了RedisClient驱动&#xff0c;写这些高并发应用的驱动性能测试分析是必不可少的。在最近一次测试中发现测试采样度不足&#xff0c;引起的一些问题&#xff1b;通过这一次的问题也警醒一下自己在以后设计上要考虑更多细节的特性需求。发现问题在写组件的时候往往…

男生追女生的超强数学建模分析

全世界有3.14 % 的人已经关注了数据与算法之美问题分析男生追女生&#xff0c;对男生来说最重要的是学习、爱情两不误。因此我们引进男生的学业成绩函数Y(t)。首先&#xff0c;我们不考虑男生的追求攻势&#xff0c;则影响该函数的因素主要是两个人的关系程度。为了便于分析&am…

java设计模式face_java设计模式之-------原型模式

一、模式定义用原型实例指定要创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象。二、模式场景假设此处结合23中设计模式记忆篇作出假设&#xff0c;不关心逻辑是否合理。柳岩在跳舞的时候烧伤了脸&#xff0c;再也回不到原来的型状。他就克隆一张脸。类图如下&#…

你被这些网络迷题难倒过吗?

全世界有3.14 % 的人已经关注了数据与算法之美消失的正方形这是数学游戏大师马丁加德纳在《从惊讶到思考》一书中提到过的例子。重新摆放分割的小块图形后&#xff0c;上面的正方形中少了一个小方格&#xff0c;它去了哪里&#xff1f;我们不妨实际操作一下&#xff0c;做两个全…

温故知新,.Net Core遇见Blazor(FluentUI),属于未来的SPA框架

什么是BlazorBlazor是一个使用.NET生成交互式客户端WebUI的框架:使用C#代替JavaScript来创建信息丰富的交互式UI。共享使用.NET编写的服务器端和客户端应用逻辑。将UI呈现为HTML和CSS&#xff0c;以支持众多浏览器&#xff0c;其中包括移动浏览器。与新式托管平台&#xff08;如…

看来要先拒绝37%的女人,才能找到真爱

全世界有3.14 % 的人已经关注了数据与算法之美在每期《非诚勿扰》节目上&#xff0c;面对一位位男嘉宾&#xff0c;24位单身女生要做出不止一次“艰难的决定”&#xff1a;到底要不要继续亮灯&#xff1f;把灯灭掉意味着放弃了这一次机会&#xff0c;继续亮灯则有可能结束节目之…

.Net日志之nlog

1. 介绍NLog是适用于各种.NET平台&#xff08;包括.NET标准&#xff09;的灵活&#xff0c;免费的日志记录平台&#xff0c;支持数据库、文件、控制台。2. 输入到文件2.1 引用nuget包<PackageReference Include"NLog" Version"4.7.6" /><PackageR…