用spark表现出色。我想知道通过 SQLContext 或者,如果这是更好的查询通过Dataframe函数,如 df.select() .有什么想法吗?:)
SQLContext
df.select()
li9yvcax1#
唯一重要的是使用什么样的底层算法进行分组。哈希聚合将比排序聚合更有效。sortaggregation-将对行进行排序,然后将匹配的行聚集在一起。o(n*logn)hashaggregation创建一个hashmap,使用key作为分组列,其余列作为Map中的值。sparksql尽可能使用hashaggregation(如果value的数据是可变的)。o(n)
a9wyjsp72#
理想情况下,spark的催化剂应该优化对同一执行计划的两个调用,并且性能应该相同。怎么打电话只是你的风格问题。实际上,与霍顿的报告有着相应的区别(https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html ),在这种情况下,当需要按记录名称降序排列的总计数的分组记录时,sql的性能优于dataframes。
mv1qrgav3#
没有任何性能差异。两种方法使用完全相同的执行引擎和内部数据结构。归根结底,一切都归结为个人喜好。可以说 DataFrame 以编程方式构造查询要容易得多,并且提供了最小的类型安全性。普通sql查询可以更简洁、更容易理解。它们也是可移植的,可以使用任何支持的语言而无需任何修改。与 HiveContext ,这些还可以用于公开一些以其他方式无法访问的功能(例如没有spark Package 器的udf)。
DataFrame
HiveContext
zqdjd7g94#
通过使用dataframe,可以将sql分解为多个语句/查询,这有助于调试、轻松增强和代码维护。将复杂的sql查询分解为简单的查询,并将结果分配给df,这样可以更好地理解。通过将查询拆分为多个df,开发人员获得了使用cache、repair(使用unique/close-to-unique键在分区间均匀分布数据)的优势。
4条答案
按热度按时间li9yvcax1#
唯一重要的是使用什么样的底层算法进行分组。哈希聚合将比排序聚合更有效。sortaggregation-将对行进行排序,然后将匹配的行聚集在一起。o(n*logn)hashaggregation创建一个hashmap,使用key作为分组列,其余列作为Map中的值。sparksql尽可能使用hashaggregation(如果value的数据是可变的)。o(n)
a9wyjsp72#
理想情况下,spark的催化剂应该优化对同一执行计划的两个调用,并且性能应该相同。怎么打电话只是你的风格问题。实际上,与霍顿的报告有着相应的区别(https://community.hortonworks.com/articles/42027/rdd-vs-dataframe-vs-sparksql.html ),在这种情况下,当需要按记录名称降序排列的总计数的分组记录时,sql的性能优于dataframes。
mv1qrgav3#
没有任何性能差异。两种方法使用完全相同的执行引擎和内部数据结构。归根结底,一切都归结为个人喜好。
可以说
DataFrame
以编程方式构造查询要容易得多,并且提供了最小的类型安全性。普通sql查询可以更简洁、更容易理解。它们也是可移植的,可以使用任何支持的语言而无需任何修改。与
HiveContext
,这些还可以用于公开一些以其他方式无法访问的功能(例如没有spark Package 器的udf)。zqdjd7g94#
通过使用dataframe,可以将sql分解为多个语句/查询,这有助于调试、轻松增强和代码维护。
将复杂的sql查询分解为简单的查询,并将结果分配给df,这样可以更好地理解。
通过将查询拆分为多个df,开发人员获得了使用cache、repair(使用unique/close-to-unique键在分区间均匀分布数据)的优势。