Sparksql.sql.codegen 没有提供任何改进

2024-01-16

我正在 Spark sql 中执行查询,如下所示。表的数据存储在 Hive 表的 2 个不同节点中。

但由于查询有点慢,我尝试在 Spark 中找到一些选项,以便查询可以执行得更快。所以我发现我们可以配置sparksql.sql.codegen and spark.sql.inMemoryColumnarStorage.compressed为 true 而不是默认的 false。

但我没有任何改进,这两个选项为 true 的查询需要 4.1 分钟来执行。使用此选项为 false 也需要 4.1 分钟。

您知道为什么这个选项不起作用吗?

   query = hiveContext.sql("""select
        l_returnflag,
        l_linestatus,
        sum(l_quantity) as sum_qty,
        sum(l_extendedprice) as sum_base_price,
        sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,
        sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,
        avg(l_quantity) as avg_qty,
        avg(l_extendedprice) as avg_price,
        avg(l_discount) as avg_disc,
        count(*) as count_order
    from
        lineitem
    where
        l_shipdate <= '1998-09-16'
    group by
        l_returnflag,
        l_linestatus
    order by
        l_returnflag,
        l_linestatus""");

query.collect();

  • spark.sql.codegen.wholeStageSpark 2.0 默认启用。它会做所有的Spark Catalist 方面可以进行内部优化 .

  • spark.sql.codegen(这是 Spark 1.3+ 中的功能)默认情况下false。即使你说的是真的,你也可以与DF.explain / debug

但是,请。重新访问 Spark 2+ 中解释的方法,如下所示。

如果您使用的是较低版本的 Spark,即 1.3 或 1.4+,则相同的 DataFrame 方法是有效的,除非我们必须与 hiveContext 一起使用。


  • 根据我的经验,上述查询的 Dataset[Row] 又名 DataFrame 方法比普通的 hive 查询要快一些。

请尝试下面的伪代码。

创建一个没有任何聚合、分组、排序的数据框,如下所示。

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
import spark.implicits._
import spark.sql


// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = "file:${system:user.dir}/spark-warehouse"

val spark = SparkSession
  .builder()
  .appName("Spark Hive Aggregations")
  .config("spark.sql.warehouse.dir", warehouseLocation)
  .enableHiveSupport()
  .getOrCreate()


val df : DataFrame = sql(("""select l_returnflag, l_linestatus,l_quantity,l_extendedprice,l_quantity ,l_extendedprice,l_quantity, l_extendedprice, l_discount from
        lineitem where l_shipdate <= '1998-09-16""");

// can use spark udf or when(cond, evaluation), instead of direct expression
 val df1 =  df.withColumn("sum_disc_price", df.col("l_extendedprice") * (1 - df.col("l_discount"))
          .withColumn("sum_charge", df.col("l_extendedprice") * (1 + df.col("l_tax"))

//NOW SUM, AVG and group by  on dataframe
val groupeddf = df1.groupBy(
  df1.col("returnflag")
, df1.col("l_linestatus")
.agg(
      avg(df1.col("l_quantity")),
    , avg(df1.col("l_extendedprice"))
    , avg(df1.col("l_discount"))
    , sum(df1.col("l_quantity"))
    , sum(df1.col("l_extendedprice"))
    , sum(df1.col("sum_disc_price"))
    , sum(df1.col("sum_charge"))
    , count(df1.col("l_linestatus").as("cnt")
    ) //end agg
    ) //end group by 
//order by on dataframe  
.orderBy("l_returnflag"))
.sort("l_linestatus")
val finalDF = groupeddf.select("l_returnflag","l_linestatus",............. etc);
  • 此外,还需要考虑执行程序内存、执行程序/核心数量等参数以找到确切的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sparksql.sql.codegen 没有提供任何改进 的相关文章

  • Spark 在执行 jdbc 保存时给出空指针异常

    您好 当我执行以下代码行时 我得到以下堆栈跟踪 transactionDF write format jdbc option url SqlServerUri option driver driver option dbtable full
  • Pyspark dataframe:如何按组应用 scipy.optimize 函数

    我有一段运行良好的代码 但使用 pandas 数据帧 groupby 处理 但是 由于文件很大 gt 7000 万组 我需要转换代码以使用 PYSPARK 数据框架 这是使用 pandas dataframe 和小示例数据的原始代码 imp
  • Pyspark - 根据条件重置累积和列

    我有以下数据框 id date reset cumsum 1001 2023 04 01 false 0 1001 2023 04 02 false 0 1001 2023 04 03 false 1 1001 2023 04 04 fal
  • Spark-shell 使用不同版本的 Scala。使用 homebrew 安装 scala 和 apache-spark

    我使用 homebrew 安装了 scala 和 apache spark 它安装了 scala 2 12 4 和 apache spark 2 2 0 但是 如果您结帐spark shell version它使用不同的 scala 版本
  • 如何使用 with open 在 pySpark 中打开存储在 HDFS 中的文件

    如何打开存储在 HDFS 中的文件 这里输入文件来自 HDFS 如果我按如下方式提供文件 我将无法打开 它将显示为找不到文件 from pyspark import SparkConf SparkContext conf SparkConf
  • Scala Sparkcollect_list() 与 array()

    有什么区别collect list and array 在 Spark 中使用 scala 我看到到处都有使用情况 但我不清楚用例来确定差异 尽管两者array https spark apache org docs latest api
  • 将类型安全配置conf文件传递给DataProcSparkOperator

    我正在使用 Google dataproc 提交 Spark 作业 并使用 google Cloud Composer 来安排它们 不幸的是 我面临着困难 我依靠 conf文件 类型安全配置文件 将参数传递给我的 Spark 作业 我正在将
  • 如何向数据框spark添加标题和列?

    我有一个数据框 我想在其中添加标题和第一列 手动 这是数据框 import org apache spark sql SparkSession val spark SparkSession builder master local appN
  • Scala 中的行聚合

    我正在寻找一种方法在 Scala 的数据框中获取一个新列来计算min max中的值col1 col2 col10对于每一行 我知道我可以使用 UDF 来做到这一点 但也许有一种更简单的方法 Thanks Porting 这个Python答案
  • 在 Databricks / Spark 中的 SQL 中为变量分配动态值

    我觉得我一定在这里遗漏了一些明显的东西 但我似乎无法在 Spark SQL 中动态设置变量值 假设我有两张桌子 tableSrc and tableBuilder 我正在创建tableDest 我一直在尝试变体 SET myVar FLOA
  • 使用列的长度过滤 DataFrame

    我想过滤一个DataFrame使用与列长度相关的条件 这个问题可能很简单 但我在SO中没有找到任何相关问题 更具体地说 我有一个DataFrame只有一个Column哪一个ArrayType StringType 我想过滤DataFrame
  • Apache Spark 和 scikit_learn 之间的 KMeans 结果不一致

    我正在使用 PySpark 对数据集执行聚类 为了找到簇的数量 我对一系列值 2 20 进行了聚类 并找到了wsse 簇内平方和 每个值的值k 在这里我发现了一些不寻常的东西 根据我的理解 当你增加集群数量时 wsse单调递减 但我得到的结
  • 将 Apache Zeppelin 连接到 Hive

    我尝试将我的 apache zeppelin 与我的 hive 元存储连接起来 我使用 zeppelin 0 7 3 所以没有 hive 解释器 只有 jdbc 我已将 hive site xml 复制到 zeppelin conf 文件夹
  • 为什么我不需要在 Databricks 中创建 SparkSession?

    为什么我不需要在 Databricks 中创建 SparkSession 集群设置的时候会自动创建一个SparkSession吗 还是其他人帮我做的 这仅在笔记本中完成 以简化用户的工作并避免他们指定不同的参数 其中许多参数不会产生任何效果
  • 按元素聚合数组

    Spark scala 相当新 我想知道是否有一种简单的方法以按列方式聚合 Array Double 这是一个例子 c1 c2 c3 1 1 1 0 1 0 3 4 1 2 1 0 0 0 4 3 2 1 0 0 0 0 0 0 2 3 1
  • 如何防止 SQL Server 在导入数据时去除前导零

    A data file被导入到SQL Server桌子 数据文件中的一列是文本数据类型 该列中的值只能是整数 SQL Server 数据库中目标表中的相应列的类型为varchar 100 但在数据导入后 SQL Server 会存储以下值
  • 在蜂巢中出现错误

    当我连接到 ireport 时 如果说在 hive shell 中显示表 则会出现此错误 元数据错误 java lang RuntimeException 无法实例化 org apache hadoop hive metastore Hiv
  • 来自 Janino 和 Commons-Compiler 的 Spark java.lang.NoSuchMethodError

    我正在构建一个使用 Spark 进行基于随机森林分类的 应用程序 当尝试运行该程序时 我从该行收到异常 StringIndexerModel labelIndexer new StringIndexer setInputCol label
  • Spark Dataframe 中的分析

    在这个问题中 我们有两个经理 M1 和 M2 在经理 M1 的团队中有两个员工 e1 和 e2 在 M2 的团队中有两个员工 e4 和 e5 以下是经理和员工的层次结构 1 M1 a e1 b e2 2 M2 a e4 b e5 我们有以下
  • Spark Dataframe/Parquet 中的枚举等效项

    我有一个包含数亿行的表 我想将其存储在 Spark 的数据帧中并作为 parquet 文件持久保存到磁盘 我的 Parquet 文件的大小现在超过 2TB 我想确保我已经对此进行了优化 这些列中很大一部分是字符串值 它们可能很长 但值通常也

随机推荐

  • 打开文件对话框以选择 XML 文件

    我有一个 VBScript 它从 c 驱动器中选择一个文件 并从 XML 文件上的标签获取信息 但我希望用户能够从对话框中选择该文件 但我似乎无法完成它 这里是我的脚本 Dim xmlDoc objNodeList plot fin Set
  • 如何为组件编写抽象类(具有可扩展状态和属性)?

    我正在尝试编写一个抽象的 ReactJS 类 然后扩展它 因此我需要扩展它的props and state 据我了解 我是 React 新手 基于尼赞的帖子 https stackoverflow com a 39124219 595122
  • 如何根据文本覆盖的 ImageView 的颜色更改文本的颜色?

    所以我在上传的用户上设置了带有白色文本标签的透明按钮ImageView 如果用户上传的图像大部分为白色 则按钮即使不是完全不可见 也很难看到 有谁知道一种方法来获得平均颜色ImageView的源图片 绘图 如果我能做到这一点 我可以将其与我
  • Git:Cherry-Pick 到工作副本而不提交

    我有几个分支 我在其中保留了某些提交 我想时不时地应用到我的工作副本 最初我尝试了择优挑选 但我不想稍后在目标分支中提交 所以我做了cherry pick reset HEAD 1 soft 有没有像只挑选工作副本这样简单的东西 使用 n
  • 如何将数组或对象的数组转换为关联数组?

    我习惯了 perl 的 map 函数 其中回调可以分配键和值 从而创建一个输入为平面数组的关联数组 我知道array fill keys http www php net manual en function array fill keys
  • Jersey ContainerResponseFilter 中的 @Context HttpServletRequest 范围

    我正在编写泽西响应过滤器 我正在使用泽西岛 1 17 我想访问过滤器 API 中 httpServletRequest 的一些属性 我现在正在做的方式如下 像下面的代码片段一样注入 servletRequest 是否安全 或者这会导致某种并
  • 使用父实例初始化子实例

    我有一个返回 Parent 类实例的函数 def generateParent do stuff return Parent some parameters 现在我想用调用的结果来初始化 Parent 的子类generateParent c
  • 如何对领域迁移进行单元测试?

    我正在尝试对 Realm 上的迁移进行单元测试 我的主要问题是 如何维护 RealmObject 的不同架构版本 以便能够创建旧对象的实例 进行迁移 然后根据新架构版本检查它是否正确 我首先尝试保留不同的架构版本 但它不会编译 因为对象具有
  • 在 jquery 中使用 css calc()

    我怎样才能做到这一点 element animate width calc 100 278px 800 element animate width calc 100 78px 800 我能做到 只要它只是 或仅px 但不是calc 我可以使
  • SQL Server 触发器 - 需要更改

    我需要更改 SQL Server 中的触发器 完成后 我是否只执行类似于存储过程的触发器 ALTER TRIGGER 是的 没错 只需使用ALTER 如果您在 SSMS 的对象资源管理器中右键单击触发器并选择脚本触发器 as ALTER T
  • stdout 不是 tty。将 bash 用于节点 + 磁带 + Tap-spec

    正在看磁带 点击视频并试图让它发挥作用 操作系统 Windows 7 Git Bash 外壳 node main js node modules bin tap spec stdout 不是 tty main js var test req
  • 我们需要手动启动Appium的Android模拟器吗?

    我是 appium 新手 我正在使用以下代码运行计算器示例测试 DesiredCapabilities capabilities new DesiredCapabilities capabilities setCapability devi
  • 如何在 Spark DataFrame/DataSet 中将行拆分为不同的列?

    假设我有如下数据集 Name Subject Y1 Y2 A math 1998 2000 B 1996 1999 science 2004 2005 我想分割该数据集的行 以便消除 Y2 列 如下所示 Name Subject Y1 A
  • ggplot 使用小饼图作为点与 geom_point

    我想用 ggplot 制作一个图表 如下所示 这个想法是绘制两个分类变量之间的 百分比匹配 通过改变点的大小很容易接近 但我想知道是否可以制作这些小饼图 用于绘制此图的示例代码 并使用点的大小作为分数的度量 temp lt data fra
  • 如何跟踪 Git 中共享公共代码的多个项目?

    我开发了一个网站 现在必须为几个客户克隆该网站 每个客户都希望进行超出视觉方面的定制 并且不能通过配置文件 偏好或类似的东西来处理 在这种情况下 我想在 Git 中使用公共代码维护一个主存储库 然后为每个客户端维护一个分支 这样 我可以在每
  • 如何使用 PHP Curl 模拟启用 JavaScript?

    我想使用 PHP Curl 解析网页中的 HTML 代码 但有一条错误消息 表明我无法在没有 JavaScript 的情况下访问该网站 我可以使用 PHP Curl 启用 JavaScript 吗 JavaScript由浏览器执行 cURL
  • 未捕获的类型错误:_this2.props.selectBook 不是函数

    我是 ReactJS 的新手 正在学习 udemy 上的 React 基础课程 我的控制台日志上出现以下错误 有人可以帮助我吗 bundle js 21818 Uncaught TypeError this2 props selectBoo
  • 如何在启动时启用“填充列指示器”

    我在 OS X 10 9 4 上使用 Aquamacs 我的中有以下几行Preferences el文件 这类似于 emacs初始化文件 add to list load path emacs d require fill column i
  • 禁用上下文 LOB 创建,因为 createClob() 方法引发错误

    我正在使用 Hibernate 3 5 6 和 Oracle 10g 我在初始化期间看到以下异常 但应用程序本身工作正常 出现这个异常的原因是什么 以及如何纠正 例外禁用上下文 LOB 创建createClob 方法抛出错误 java la
  • Sparksql.sql.codegen 没有提供任何改进

    我正在 Spark sql 中执行查询 如下所示 表的数据存储在 Hive 表的 2 个不同节点中 但由于查询有点慢 我尝试在 Spark 中找到一些选项 以便查询可以执行得更快 所以我发现我们可以配置sparksql sql codege