hive:通过与数据定义记录的比较来验证数组中填充数据的质量,并找出填充数据的百分比、数据的质量等级

g6ll5ycj  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(404)

我有两张table。表t1定义了元数据。即,理想事务应该包含哪些属性值。它还通过数组中记录的顺序来定义属性的重要性顺序。第一条记录是最重要的,它的权重是1。第二个是0.9,第三个是0.8,第四个是0.7,依此类推。。。。10岁以上的人最不重要。我需要找到事务表t2中填充的数据的质量。找出填充属性的百分比以及它们的质量等级。
t1级

------------------------------------
|  a_id  |    attribute_values      |    
------------------------------------
|  12345 | ["a1", "a2", "a3", "a5"] |
|  6789  | ["b1", "b4", "b7"]       |
 ------------------------------------

t2级

------------------------------------
| b_id  |  a_id   | attribute_values|
------------------------------------
| B123  |  12345  | ["a2", "a5"]    |
| B456  |  6789   | ["b1, "b7"]     |
-------------------------------------

我正在寻找方法来计算我的t2记录的质量等级如下

------------------------------------------
| b_id | percent_complete | quality_rank |
------------------------------------------
| B123 |    50            |    0.4.      |
| B456 |   66.66          |    0.6.      |
------------------------------------------

b123-(四分之二)完成50%。质量等级-(0.9+0.7)/4=0.4
b456-(三分之二)完成66.66%。质量等级-(1+0.8)/3=0.6

00jrzges

00jrzges1#

把两张table都炸了。计算第一个表的权重和排名,然后与另一个表合并。但不能在单个sql中实现。
scala>val t1=seq((12345,list(“a1”,“a2”,“a3”,“a5”)),(6789,list(“b1”,“b5”,“b7”))).todf(“a_id”,“attribute_values”)
scala>val t2=seq((“b123”,12345,list(“a2”,“a5”)),(“b456”,6789,list(“b1”,“b7”))).todf(“b\u id”,“a\u id”,“attribute\u values”)
scala>val t1\u 1=t1。选择($“a\u id”,posexplode($“attribute\u values”))
scala>t1\ U 1.show

+-----+---+---+
| a_id|pos|col|
+-----+---+---+
|12345|  0| a1|
|12345|  1| a2|
|12345|  2| a3|
|12345|  3| a5|
| 6789|  0| b1|
| 6789|  1| b5|
| 6789|  2| b7|
+-----+---+---+

scala>t1\u 1.createorreplacetempview(“tab\u t1\u 1”)
scala>spark.sql(“select*,1-(pos*0.1)as calc\u weight,count(col)over(partition by a\u id)as rec\u count from tab\u t1\u 1”).show

+-----+---+---+-----------+---------+
| a_id|pos|col|calc_weight|rec_count|
+-----+---+---+-----------+---------+
| 6789|  0| b1|        1.0|        3|
| 6789|  1| b5|        0.9|        3|
| 6789|  2| b7|        0.8|        3|
|12345|  0| a1|        1.0|        4|
|12345|  1| a2|        0.9|        4|
|12345|  2| a3|        0.8|        4|
|12345|  3| a5|        0.7|        4|
+-----+---+---+-----------+---------+

scala>val t1\u 2=spark.sql(“select*,1-(pos*0.1)as calc\u weight,count(col)over(partition by a\u id)as rec\u count from tab\u t1\u 1”)
scala>t1_2.createorreplacetempview(“tab_t1_2”)
scala>val t2\u 1=t2。选择($“b\u id”,$“a\u id”,分解($“attribute\u values”))
scala>t2\u 1.显示

+----+-----+---+
|b_id| a_id|col|
+----+-----+---+
|B123|12345| a2|
|B123|12345| a5|
|B456| 6789| b1|
|B456| 6789| b7|
+----+-----+---+

scala>t2_1.创建或替换临时视图(“tab_t2_1”)
scala>spark.sql(“select b\u id,t1.a\u id,round(count(t2.col)*100/max(t1.rec\u count),2)as percent\u complete,round(sum(t1.calc\u weight)/max(t1.rec\u count),2)as quality\u rank from tab\u t1\u 2 t1,tab\u t2\u 1 t2 where t1.a\u id=t2.a\u id and t1.col=t2.col.col按b\u id,t1.a\u id分组”).show

+----+-----+----------------+------------+
|b_id| a_id|percent_complete|quality_rank|
+----+-----+----------------+------------+
|B123|12345|            50.0|        0.40|
|B456| 6789|           66.67|        0.60|
+----+-----+----------------+------------+

相关问题