Spark SQL计算指标的特定的列转换为Json,其他列不变
1.实现效果前后对比
parquet文件链接:https://pan.百度.com/s/1dmugj-ty47Hgi6WLAPaiGQ?pwd=yyds
提取码:yyds
--来自百度网盘超级会员V2的分享
原表格(spark自带的parquet文件)user.parquet | ||
---|---|---|
name | favorite_color | favorite_numbers |
Alyssa | null | [3, 9, 15, 20] |
Ben | red | [ ] |
======>转换后
实现name,favorite_color转json的表格 | ||
---|---|---|
Newcol | favorite_numbers | |
{“name”: “Alyssa”,”favorite_color”: “null”} | [3, 9, 15, 20] | |
{“name”: “ Ben”,”favorite_color”: “red”} | [ ] |
2.代码附上
-
package com.sz.table_ddl.test
-
-
import org.apache.spark.SparkConf
-
import org.apache.spark.sql.{SaveMode, SparkSession}
-
import org.apache.spark.sql.functions.{struct, to_json}
-
-
object col_json {
-
def main(args: Array[String]): Unit = {
-
-
val conf: SparkConf = new
-
SparkConf().setMaster("local[*]").setAppName("SparkSQL")
-
//1.todo 建立和spark框架的链接
-
val spark: SparkSession = SparkSession.builder().config(conf).getOrCreate()
-
-
//禁用广播
-
spark.sql("set spark.sql.autoBroadcastJoinThreshold=-1")
-
//2. todo 读取文件
-
val string_quet=spark.read.format("parquet").load("D:\\a\\users.parquet")
-
//创建虚拟表
-
string_quet.createOrReplaceTempView("users")
-
//显示parquet文件的数据
-
string_quet.show(5)
-
-
//3. todo 计算指标
-
val rs=spark.sql(
-
"""
-
|select
-
|s.name as name,
-
|s.favorite_color as color,
-
|s.favorite_numbers as numbers
-
|from users s
-
|""".stripMargin)
-
-
rs.show()
-
//导包--> import org.apache.spark.sql.functions.{struct, to_json}
-
val finalDF = rs.withColumn("Newcol", to_json(struct("color","numbers")))
-
//一定要用sql得到列的别名
-
//selectExpr查询指定列
-
finalDF.selectExpr("Newcol","numbers").show(false)
-
-
-
/**
-
=========================================
-
下面的代码要自测,我就不注释掉了,从官网拿的
-
=========================================
-
**/
-
-
//当然得到的结果也可以导入到mysql
-
-
//1. todo mysql数据库建表
-
// 建表中`numbers` enum,没有测过,思路是这样
-
/**
-
create table tab_json03 (
-
`numbers` enum,
-
`|Newcol` JSON
-
)engine = InnoDB default charset = utf8mb4;
-
-
**/
-
//2. todo 导入数据到mysql
-
finalDF.selectExpr("Newcol","numbers").write.format("jdbc")
-
// todo option:jdbc里面的四大金刚 url,table,user,password
-
.option("url", "jdbc:mysql://localhost:3306/names?&useUnicode=true&characterEncoding=utf8")
-
.option("dbtable", "tab_json02")
-
.option("user", "root")
-
.option("password", "root")
-
// todo 更新
-
// .mode(SaveMode.Overwrite)
-
// todo 追加
-
.mode(SaveMode.Append)
-
.save()
-
-
/**
-
=========================================
-
这个代码自测,
-
=========================================
-
**/
-
// todo 释放资源
-
spark.stop()
-
}
-
}
3.代码结果
参考:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggjckc
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13