0

これが私の問題です。ハイブに2つの列、id、およびdouble値の配列を持つテーブルがあります。特定のユーザーの行全体に double 値を追加したいと考えています。データはこんな感じ。各配列の長さは同じで 100 を超えていますが、簡単にするためにここでは 3 を指定しました。

+--------+--------------------------
| id  |         value         | 
+--------+--------------------------+
| 1      | [0.03,0.15,-0.03]  |
| 1      | [-0.2,0.11,-0.16]  |
| 1      | [0.03,0.15,-0.03]  | 
| 2      | [0.02,0.01,0.05]   | 
| 2      | [0.1,0.03,0.3]     | 
+--------+--------------------------+

私が期待している答えは

+--------+--------------------
| id  |         value         | 
+--------+---------------------
| 1      | [0.4,0.41,-0.22]   |
| 2      | [0.12,0.04,0.35]   | 
+--------+---------------------

ハイブクエリを使用してこれを行うにはどうすればよいですか? 前もって感謝します

更新:これが私が解決策を得るために使用したものです。しかし、私はより良い解決策を探しています。

SELECT id, concat_ws(',', collect_list(CAST(val_new AS STRING))) as val_fin FROM (SELECT id, avg(valueid) as val_new from (SELECT id, valueid, index from user_interest_profiles.clicked_articles LATERAL VIEW POSEXPLODE(split(vector,'\\,')) value AS index, valueid )x GROUP BY id, index)x GROUP BY id;

私が使用した実装は次のとおりです。

  • 配列をインデックスで分解する
  • ID とインデックスでグループ化して値を平均化する
  • collect_list を使用して行全体で値を連結します
4

0 に答える 0