由于没有原生支持,肯定要写UDF
直接上代码
import com.alibaba.fastjson.JSON;
import org.apache.spark.sql.api.java.UDF2;
import scala.collection.Seq;
import java.util.HashMap;
import java.util.Map;
public class ToJsonUdf implements UDF2<Seq<String>, Seq<String>, String> {
@Override
public String call(Seq<String> keys, Seq<String> values) {
Map<String, String> map = new HashMap<>();
for (int i = 0; i < keys.size(); i++) {
String key = keys.apply(i);
String val = "";
if (values.size() > i) {
val = values.apply(i);
}
map.put(key, val);
}
return JSON.toJSONString(map);
}
}
针对写好的UDF的使用
Select
toJson(map_keys(myMapField),map_values(myMapField) ) as jsonStr
From myTable