我有两张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
1条答案
按热度按时间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
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
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.显示
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