使用Spark执行良好的性能 . 我想知道通过 SQLContext 使用sql查询是否合适,或者如果通过 df.select() 等DataFrame函数进行查询更好 .
SQLContext
df.select()
任何的想法? :)
没有任何性能差异 . 两种方法都使用完全相同的执行引擎和内部数据结构 . 在一天结束时,所有归结为个人喜好 .
可以说 DataFrame 查询更容易以编程方式构造并提供最小类型安全性 .
DataFrame
简单的SQL查询可以更简洁,更容易理解 . 还有便携式,可以使用所有支持的语言而无需任何修改 . 使用 HiveContext ,这些也可用于公开某些功能,这些功能在其他方面是不可访问的(例如,没有Spark包装器的UDF) .
HiveContext
通过使用DataFrame,可以将SQL分解为多个语句/查询,这有助于调试,轻松增强和代码维护 .
将复杂的SQL查询分解为更简单的查询并将结果分配给DF可以更好地理解 .
通过将查询拆分为多个DF,开发人员可以获得使用缓存,修复(使用唯一/接近唯一键在分区上均匀分布数据)的优势 .
理想情况下,Spark的催化剂应该优化对同一执行计划的两次调用,并且性能应该相同 . 如何打电话只是你的风格问题 . 实际上,Hortonworks(https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html)的报告存在差异,当您需要GROUPED记录及其记录名称为SORT DESCENDING的总COUNTS时,SQL优于Dataframes .
3 回答
没有任何性能差异 . 两种方法都使用完全相同的执行引擎和内部数据结构 . 在一天结束时,所有归结为个人喜好 .
可以说
DataFrame
查询更容易以编程方式构造并提供最小类型安全性 .简单的SQL查询可以更简洁,更容易理解 . 还有便携式,可以使用所有支持的语言而无需任何修改 . 使用
HiveContext
,这些也可用于公开某些功能,这些功能在其他方面是不可访问的(例如,没有Spark包装器的UDF) .通过使用DataFrame,可以将SQL分解为多个语句/查询,这有助于调试,轻松增强和代码维护 .
将复杂的SQL查询分解为更简单的查询并将结果分配给DF可以更好地理解 .
通过将查询拆分为多个DF,开发人员可以获得使用缓存,修复(使用唯一/接近唯一键在分区上均匀分布数据)的优势 .
理想情况下,Spark的催化剂应该优化对同一执行计划的两次调用,并且性能应该相同 . 如何打电话只是你的风格问题 . 实际上,Hortonworks(https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html)的报告存在差异,当您需要GROUPED记录及其记录名称为SORT DESCENDING的总COUNTS时,SQL优于Dataframes .