[SparkSQL] 列转行lateral view explode函数和FlatMap算子两种方式实现炸裂
我用了两种方法实现列转行,说一下我平时使用SparkSQL的习惯,我通常
1)是先读取HDFS中的文件,包括txt、parquet等格式
2)然后通过createOrReplaceTempView 方法创建临时表格
3)之后写sql直接处理
相关代码可以参考我写的另一篇文章:
一、开发环境
spark-2.1.0-bin-hadoop2.6
二、纯SQL实现列转行
1、因为我在项目中的需求是同时将两个Array字段展开,所以在这里举的例子是同时处理两个字段的情况。
2、要提醒的是,同时展开多个字段会造成数据膨胀严重,计算时会消耗大量的资源,需要根据实际情况进行考虑,选择比较合适的方法。
3、语法:使用lateral view explode 函数进行列转行,新字段的别名,不能和以前的字段名相同。
sparkSession.sql(
s"""
|select
| user_id,
| hobby,
| skill
|from t1
|lateral view explode(hobbies) tempcol as hobby
|lateral view explode(skills) tempcol as skill
""".stripMargin
)