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…

JavaScript对SEO的影响及解决之道

不只是Google&#xff0c;yahoo在官方文档中也有类似的夸大&#xff1a;  尽量使用搜索引擎能够识别的文本信息&#xff0c;防止过多的JavaScript、Cookie、框架、DHTML 或 Flash 等繁杂技术。  http://help.cn.yahoo.com/answerpage_2911.html  百度虽然没有明确的说明&…

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

大家好&#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;使…

[转]模拟电路设计经典教材推荐

终于开通博客了&#xff0c;给大家推荐基本经典教材&#xff0c;我也是从一位师兄那得到的&#xff01; 1. 拉扎维的《模拟CMOS集成电路设计》&#xff0c;我们研二模电课的教材&#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…

如何在.NET Core中为gRPC服务设计消息文件(Proto)

如何在.NET Core中为gRPC服务设计消息使用协议缓冲区规范定义gRPC服务非常容易&#xff0c;但从需求转换为.NET Core&#xff0c;然后管理服务的演变时&#xff0c;需要注意几件事。创建gRPC服务的核心是.proto文件&#xff0c;该文件以与语言无关的格式描述了该服务。使用.pro…

五大原则之----里氏替换原则(LSP)

阐述&#xff1a;子类型&#xff08;subtype&#xff09;必须能够替换掉它们的基类型&#xff08;basetype&#xff09; 先提出一个问题&#xff1a;正方形是不是一种特殊的长方形&#xff08;IS - A关系&#xff09;&#xff1f; 先不要回答这个问题&#xff0c;看下面的分析。…

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

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

java富文本如何转义_富文本编辑器wangEditor中转义字符的问题

前段时间做项目的时候&#xff0c;要使用富文本编辑器&#xff0c;采用的是wangEditor&#xff0c;结果当用户在为文本添加样式的时候&#xff0c;发现居然无法直接保存&#xff0c;遂查看后台数据。发现很多样式都被过滤掉了&#xff0c;后台接受的数据中根本没有样式。在网上…

Async和Await异步编程的原理

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

Lang.NEXT 2012相关Session

2012年4.2-4日的Lang.NEXT 2012是.NET(CLR, DLR 以及其他平台)上语言及相关工具的设计开发者的盛会。会议的相关Session已经放出&#xff0c;绝对值得好好的学习&#xff0c;地址是&#xff1a;http://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012?sortsequential&…

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

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

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

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

最近忙的事

最近忙于背ccna题库&#xff0c;实际上。。我基本上感觉是中文背两次英文的还要看两次&#xff0c;这样才行。至于实验&#xff0c;貌似。。不敢去碰&#xff0c;因为每次做同一个实验遇到的问题那可是都不一样啊。还有。。四级&#xff0c;还有。。论文等等&#xff0c;说起来…