apache-spark - Hive hql 到 Spark sql 的转换
问题描述
我需要将 hql 转换为 spark sql。我正在使用以下方法,因此我没有看到性能上有太大变化。如果有人有更好的建议,请告诉我。
蜂巢-
create table temp1 as select * from Table1 T1 join (select id , min(activity_date) as dt from Table1 group by id) T2 on T1.id=T2.id and T1.activity_date=T2.dt ;
create table temp2 as select * from temp1 join diff_table
我有大约 70 个这样的内部配置单元临时表,源 Table1 中的数据约为 18 亿,没有分区和 200 个 hdfs 文件。
火花代码 - 运行 20 个执行器,5 个执行器核心,10G 执行器内存,纱线客户端,驱动程序 4G
import org.apache.spark.sql.{Row,SaveMode,SparkSession}
val spark=SparkSession.builder().appName("test").config("spark.sql.warehouse.dir","/usr/hive/warehouse").enableHiveSupport().getOrCreate()
import spark.implicit._
import spark.sql
val id_df=sql("select id , min(activity_date) as dt from Table1 group by id")
val all_id_df=sql("select * from Table1")
id_df.createOrReplaceTempView("min_id_table")
all_id_df.createOrReplaceTempView("all_id_table")
val temp1_df=sql("select * from all_id_table T1 join min_id_table T2 on T1.id=T2.id and T1.activity_date=T2.dt")
temp1_df.createOrReplaceTempView("temp2")
sql("create or replace table temp as select * from temp2")
解决方案
推荐阅读
- awk - 如何在同一字段中查找/打印两个相反符号的连续浮点数?
- python - 如何通过 API 从 Telegram 组获取消息 - Python
- memory - 我正在尝试通过很多步骤使用 5 维数组。我收到一个错误:''std::bad_alloc''
- javascript - 需要将元素替换为数组中右侧元素的最大值
- java - 设置后清除工具栏菜单(启动活动时)
- visual-studio - 自动缩进破坏文件的缩进
- angular - 以 Angular 6 模板驱动形式向父元素添加验证类
- binary - ARM二进制MUL和数据操作之间的区别
- parsing - 使用“Parsec”解析各种二进制函数链的正确方法?
- python - 如何在名为 Fraction 的类中使用 __mul__