在spark SQL中,我试图加入已经存在的多个表。 我怎么需要使用一个函数来获取用户输入然后从其他两个表中获取详细信息,然后在连接中使用此结果。 查询是下面的一些事情 从table1 t1中选择t1.col1,t1.col2,t2.col3,cast((t1.value * t3.value) 在t1.col = t2.col上左连接table2 t2 左连接fn_calculate(value1,value2)为t1.value = t3.value上的t3
这里fn_calculate是将value1,value2作为参数的函数,然后该函数返回一个行表。(在返回Table的SQL服务器中)
我试图通过使用hive泛型UDF来实现这一点,它将获取输入参数然后返回数据帧?如下所示
public String evaluate(DeferredObject[] arguments) throws HiveException {
if (arguments.length != 1) {
return null;
}
if (arguments[0].get() == null) {
return null;
}
DataFrame dataFrame = sqlContext
.sql("select * from A where col1 = value and col2 =value2");
javaSparkContext.close();
return "dataFrame";
}
或scala函数我需要使用如下所示吗?
static class Z extends scala.runtime.AbstractFunction0<DataFrame> {
@Override`enter code here`
public DataFrame apply() {
// TODO Auto-generated method stub
return sqlContext.sql("select * from A where col1 = value and col2
=value2");
}
}