过去6个月以上,我一直在工作。我已经看到来自数据仓库和SQL背景的人们正在使用
在SQL中实现聚合和其他转换逻辑static t_file *sort_files(t_file *head) {
t_file *file;
t_file *next;
file = head;
while ((next = file->next) != NULL) {
if (strcmp(file->name, next->name) > 0) {
swap_files(file, next); // swap the nodes linkage
file = next; // next is now before file
if (file->previous) {
file = file->previous; // backtrack to the previous node
} else {
head = file; // save the new head of list
}
} else {
file = file->next;
}
}
return head;
}
直接在配置单元表上,或在使用
将数据框注册为TempView之后spark.sql()
(where spark is the sparkSession object)
但是,如果我们看到了其他选项,例如Windows函数或可直接在数据帧上实现的替代项,或者甚至可以将函数注册为UDF并可以在数据帧上实现。
说如果我需要在CITY_CENSUS数据框上按城市实施人口分组计数,则可以通过以下两种方法之一实现
使用spark.sql():
dataframe.createOrReplaceTempView().
直接在数据框上使用聚合:
CITY_CENSUS.createOrReplaceTempView("CITY_CENSUS")
spark.sql("select city,count(population) from CITY_CENSUS group by city")
像这样,我们有很多例子。
使用数据框方法比spark.sql()有任何性能优势,反之亦然。
答案 0 :(得分:0)
数据帧DSL当前不会处理所有子查询。使用Spark SQL,您将能够更好地解决这种情况。当然,AGGRegations也可能需要这些...
UDF不能被Catalyst所优化,并且可能导致物理计划的执行效率降低。