最近有一个需求是这样的:原来的数据是存储在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 = {