Dataframe or RDD or hiveql 哪个高效?
Which is efficient, Dataframe or RDD or hiveql?
我是 Apache Spark 的新手。
我的工作是读取两个 CSV 文件,select 从中读取一些特定的列,合并,聚合并将结果写入单个 CSV 文件。
例如,
CSV1
name,age,deparment_id
CSV2
department_id,deparment_name,location
我想获取第三个 CSV 文件
name,age,deparment_name
我正在将两个 CSV 文件加载到数据帧中。
然后能够使用数据帧
中存在的几种方法join,select,filter,drop
获得第三个数据帧
我也可以使用多个 RDD.map()
来做同样的事情
我也可以使用 HiveContext
执行 hiveql
来做同样的事情
我想知道如果我的 CSV 文件很大,哪种方法最有效?为什么?
Spark 的总体方向是使用数据帧,以便通过催化剂优化查询
DataFrames 和 spark sql 查询都使用催化剂引擎进行了优化,所以我猜它们会产生类似的性能
(假设您使用的版本 >= 1.3)
而且两者都应该比简单的 RDD 操作要好,因为对于 RDD,spark 不知道你的数据类型,所以它不能做任何特殊的优化
此博客包含基准测试。 Dataframes 比 RDD
更高效
这是来自博客的片段
在高层次上,有两种优化。首先,Catalyst 应用逻辑优化,例如谓词下推。优化器可以将过滤谓词下推到数据源中,使物理执行能够跳过不相关的数据。在 Parquet 文件的情况下,可以跳过整个块,并且可以通过字典编码将字符串比较转换为更便宜的整数比较。对于关系数据库,谓词被下推到外部数据库以减少数据流量。
其次,Catalyst 将操作编译为执行的物理计划,并为那些通常比手写代码更优化的计划生成 JVM 字节码。例如,它可以在广播连接和随机连接之间进行智能选择,以减少网络流量。它还可以执行较低级别的优化,例如消除昂贵的对象分配和减少虚函数调用。因此,我们希望现有 Spark 程序在迁移到 DataFrames 时能够提高性能。
这是性能基准https://databricks.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-16-at-9.46.39-AM.png
我是 Apache Spark 的新手。
我的工作是读取两个 CSV 文件,select 从中读取一些特定的列,合并,聚合并将结果写入单个 CSV 文件。
例如,
CSV1
name,age,deparment_id
CSV2
department_id,deparment_name,location
我想获取第三个 CSV 文件
name,age,deparment_name
我正在将两个 CSV 文件加载到数据帧中。 然后能够使用数据帧
中存在的几种方法join,select,filter,drop
获得第三个数据帧
我也可以使用多个 RDD.map()
我也可以使用 HiveContext
hiveql
来做同样的事情
我想知道如果我的 CSV 文件很大,哪种方法最有效?为什么?
Spark 的总体方向是使用数据帧,以便通过催化剂优化查询
DataFrames 和 spark sql 查询都使用催化剂引擎进行了优化,所以我猜它们会产生类似的性能 (假设您使用的版本 >= 1.3)
而且两者都应该比简单的 RDD 操作要好,因为对于 RDD,spark 不知道你的数据类型,所以它不能做任何特殊的优化
此博客包含基准测试。 Dataframes 比 RDD
更高效这是来自博客的片段
在高层次上,有两种优化。首先,Catalyst 应用逻辑优化,例如谓词下推。优化器可以将过滤谓词下推到数据源中,使物理执行能够跳过不相关的数据。在 Parquet 文件的情况下,可以跳过整个块,并且可以通过字典编码将字符串比较转换为更便宜的整数比较。对于关系数据库,谓词被下推到外部数据库以减少数据流量。 其次,Catalyst 将操作编译为执行的物理计划,并为那些通常比手写代码更优化的计划生成 JVM 字节码。例如,它可以在广播连接和随机连接之间进行智能选择,以减少网络流量。它还可以执行较低级别的优化,例如消除昂贵的对象分配和减少虚函数调用。因此,我们希望现有 Spark 程序在迁移到 DataFrames 时能够提高性能。
这是性能基准https://databricks.com/wp-content/uploads/2015/02/Screen-Shot-2015-02-16-at-9.46.39-AM.png