【发布时间】:2020-10-23 03:07:13
【问题描述】:
任务:获取表的数据类型(在 hive 中)以及每列值的平均长度。
我正在尝试使用 scala 在 spark 中完成上述任务。
首先我做到了val table = spark.sql("desc table")
输出包含三列,col_name、datatype、comment。
然后,我尝试仅将列值作为逗号分隔的字符串获取。
val col_string = table.select("col_name").rdd.map(i => "avg(length(trim("+i(0).toString+")))").collect.mkString(", ")
现在,我可以在另一个查询中使用此字符串来获取所有列的平均长度,如下所示,但输出数据帧的列数与表一样多,我不知道如何将它与table 数据框。
val tbl_length = spark.sql("select " + col_string + " from schema.table")
我已经研究过转置第二个数据帧,这看起来效率不高,而且我作为 spark 和 scala 的初学者很难掌握。
我上面的方法是好的/有效的吗?如果有更好的方法请建议。 即使有更好的方法,您能否也请解释一下我如何加入两个这样的 row=>column 数据集。
输入表:
col1| col2| col3
交流| 123| 0
Defg| 23456| 0
预期输出
列名|数据类型|平均长度
col1|字符串| 3
col2|诠释| 4
col3|诠释| 1
【问题讨论】:
-
分享一些示例ip和op。
-
@SathiyanS 添加了示例输入和预期输出。请立即检查。
标签: scala apache-spark hive