java spark list 转为 RDD 转为 dataset 写入表中
package com.example.demo; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.SparkSession; public class DemoApplication { public static void main(String[] args) { // /*-----------------------线上调用方式--------------------------*/
// 读入店铺id数据
SparkSession spark = SparkSession.builder().appName("demo_spark").enableHiveSupport().getOrCreate();
Dataset<Row> vender_set = spark.sql("select pop_vender_id from app.app_sjzt_payout_apply_with_order where dt = '2019-08-05' and pop_vender_id is not null");
System.out.println( "数据读取 OK" ); JavaSparkContext sc = new JavaSparkContext(spark.sparkContext());
// JavaSparkContext sc = new JavaSparkContext();
SQLContext sqlContext = new SQLContext(sc); // 将数据去重,转换成 List<Row> 格式
vender_set = vender_set.distinct();
vender_set = vender_set.na().fill(0L);
JavaRDD<Row> vender= vender_set.toJavaRDD();
List<Row> vender_list = vender.collect(); // 遍历商家id,调用jsf接口,创建list 保存返回数据
List<String> list_temp = new ArrayList<String>();
for(Row row:vender_list) {
String id = row.getString(0);
String result = service.venderDownAmountList(id); System.out.println( "接口调用返回值 OK" ); // 解析json串 ,按照JSONObject 和 JSONArray 一层一层解析 并过返回滤数据
JSONObject jsonOBJ = JSON.parseObject(result);
JSONArray data = jsonOBJ.getJSONArray("data");
if (data != null) {
JSONObject data_all = data.getJSONObject(0);
double amount = data_all.getDouble("jfDownAmount");
// 将商家id 和 倒挂金额存下来
list_temp.add("{\"vender_id\":"+id+",\"amount\":"+amount+"}");
}
else {
continue;
} System.out.println( "解析 OK" ); }
// list 转为 RDD
JavaRDD<String> venderRDD = sc.parallelize(list_temp); // 注册成表
Dataset<Row> vender_table = sqlContext.read().json(venderRDD);
vender_table.registerTempTable("vender");
System.out.println( "注册表 OK" ); // 写入数据库
spark.sql("insert overwrite table dev.dev_jypt_vender_dropaway_amount select vender.vender_id,vender.amount from vender");
System.out.println( "写入数据表 OK" ); sc.stop();
System.out.println( "Hello World!" ); }
}
java spark list 转为 RDD 转为 dataset 写入表中的更多相关文章
- 【Java/JDBC】借助ResultSetMetaData,从数据库表中抽取字段信息存成Excel文件
本例工程下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-3.rar 工作中曾有个为42张表建立测 ...
- spark的数据结构 RDD——DataFrame——DataSet区别
转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接 ...
- Java基础之写文件——在通道写入过程中的缓冲区状态(BufferStateTrace)
控制台程序,在Junk目录中将字符串“Garbage in, garbage out\n”写入到名为charData.txt的文件中. import static java.nio.file.Stan ...
- Java基础之写文件——将素数写入文件中(PrimesToFile)
控制台程序,计算素数.创建文件路径.写文件. import static java.lang.Math.ceil; import static java.lang.Math.sqrt; import ...
- java前端传入的json字符串保存到表中的方法
表 service_goods_base 字段如下: 传入的json 字符串: servicePictureArray : [{"picServiceUrl": "h ...
- mysql将语句写入表中
使用create table语句即可 CREATE TABLE membertmp (select a.* from member as a where a.phone <> '' and ...
- 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
先看一下我要实现的功能界面: 这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...
- 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
- 将python的字典格式数据写入excei表中
上面的为最终结果 import requests import re import xlwt import json # 导入必须的包: xlwt,json,requests,re. headers ...
随机推荐
- 【常用技巧】js开发的一些技巧
1.console.log的特殊用法: 添加%c特殊符号即可打印出样式 console.log("%c djsakiasjdkasjdkjas","font-size:6 ...
- javascript_06-控制流程
流程控制 程序的三种基本结构 顺序结构 选择结构 循环结构 判断语句 if 语法: if(condition){ //todo }else if{ //todo }else{ //todo } var ...
- Linux命令——ls
15 Interview Questions on Linux “ls” Command – Part 1 10 Useful ‘ls’ Command Interview Questions – P ...
- es6中的Object.assign
在写一些插件的时候,我们会经常遇到所传参数需要合并默认参数,并覆盖相同参数的情况,在jQuery中我们可以使用$.extend(),在原生中要想使用得自己封装, 但自从es6出现了Object.ass ...
- orm多表查询基于双下划线
###########基于双下划线的跨表查询(基于join实现的)############# key: 正向查询按字段,反向查询按表名小写 1.查询python这本书出版社的名字 ret = Book ...
- SHELL编程基础01
首先shell是在linux下运行的一种环境,它是以shell脚本来运行的,学会了它基本可以解决任何问题,也可以用shell脚本开发. 和java,python的相比,其弱类型的语言没有那么复杂的结构 ...
- 第119题:杨辉三角II
一. 问题描述 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 二. 解题思路 ...
- Selenium常用API的使用java语言之5-selenium元素定位
1.selenium定位方法 Selenium提供了8种定位方式. id name class name tag name link text partial link text xpath css ...
- 什么是php面向对象及面向对象的三大特性
什么是面向对象? 面向对象编程,也就是我们常说的OOP,其实是面向对象的一部分.面向对象一共有3个部分:面向对象分析(OOA).面向对象设计(OOD).面向对象编程(OOP).我们现在将要学习的就是面 ...
- sql server 时间处理函数 datediff() 和getdate()
一: DATEDIFF() 定义和用法 DATEDIFF() 函数返回两个日期之间的时间. 语法 DATEDIFF(datepart,startdate,enddate) startdate 和 en ...