2017-04-04 3 views
0

ユーザーごとに複数の行を持つHiveテーブル(ORCファイル形式)にユーザーデータを格納しています。例:HiveでPySparkを使用してグループごとにデータを処理する

user | attr1 | attr2 
---- | ----- | ----- 
u1 | 1  | a 
u1 | 2  | b 
u2 | 3  | a 
u2 | 4  | b 

同じユーザーに属する各行のグループをマップして、文字列を計算する必要があります。この例では、f([(1, a), (2, b)])f([(3, a), (4, b)])です。

これはHive + SparkのPython APIを使用してどのように行うことができますか?

Python GroupedData APIには、stat関数しかありません。根本的なRDDを減らすべきでしょうか?グループ化にHive/ORC列形式を使用するより効率的な方法がありますか?

答えて

0
from pyspark.sql import functions as f 

df = spark.createDataFrame([['u1', 1, 'a'], ['u1', 2, 'b'], ['u2', 3, 'a'], ['u2', 4, 'b']], 
          schema=['user', 'attr1', 'attr2']) 
df = df.groupBy('user').agg(f.collect_list(f.array(df['attr1'], df['attr2'])).alias('array_col')) 
df = df.withColumn('len_col', f.size(df['new_col'])) 
df.show(truncate=False) 

+----+----------------------------------------+-------+       
|user|array_col        |len_col| 
+----+----------------------------------------+-------+ 
|u1 |[WrappedArray(1, a), WrappedArray(2, b)]|2  | 
|u2 |[WrappedArray(3, a), WrappedArray(4, b)]|2  | 
+----+----------------------------------------+-------+ 
関連する問題