2016-07-15 3 views
1

У меня есть данные в следующем формате в таблице улей.Сочетание данных на основе столбца в искровом

user | purchase | time_of_purchase 

Я хочу, чтобы получить данные в

user | list of purchases ordered by time 

Как это сделать в pyspark или hiveQL?

Я попытался использовать collect_list в улье, но он не сохраняет порядок правильно по метке времени.

Редактировать: Добавить образцы данных по запросу KartikKannapur. Вот пример данных

94438fef-c503-4326-9562-230e78796f16 | Bread | Jul 7 20:48 
94438fef-c503-4326-9562-230e78796f16 | Shaving Cream | July 10 14:20 
a0dcbb3b-d1dd-43aa-91d7-e92f48cee0ad | Milk | July 7 3:48 
a0dcbb3b-d1dd-43aa-91d7-e92f48cee0ad | Bread | July 7 3:49 
a0dcbb3b-d1dd-43aa-91d7-e92f48cee0ad | Lotion | July 7 15:30 

Выход я хочу

94438fef-c503-4326-9562-230e78796f16 | Bread , Shaving Cream 
a0dcbb3b-d1dd-43aa-91d7-e92f48cee0ad | Milk , Bread , Lotion 
+0

In Spark <2.0 практически невозможно с помощью DataFrames. – zero323

+0

Возможно ли это сделать с помощью дополнительных библиотек или любого преобразования в RDD и т. Д. – user1411335

+0

Вы можете всегда конвертировать в RDD и groupByKey со всеми штрафами за производительность. – zero323

ответ

2

Один из способов сделать это

Сначала создайте улья контекст и читать таблицу в РДУ.

from pyspark import HiveContext 
purchaseList = HiveContext(sc).sql('from purchaseList select *') 

Затем обработать RDD

from datetime import datetime as dt 
purchaseList = purchaseList.map(lambda x:(x[0],[x[1],dt.strptime(x[2],"%b %d %H:%M")])) 
purchaseByUser = purchaseList.groupByKey() 
purchaseByUser = purchaseByUser.map(lambda x:(x[0],[y[0] for y in sorted(x[1], key=lambda z:z[1])])) 
print(purchaseByUser.take(2)) 

Выход

[('94438fef-c503-4326-9562-230e78796f16', ['Bread', 'Shaving Cream']), ('a0dcbb3b-d1dd-43aa-91d7-e92f48cee0ad', ['Milk', 'Bread', 'Lotion'])] 

Сохранить RDD как новый улей стол

schema_rdd = HiveContext(sc).inferSchema(purchaseByUser) 
schema_rdd.saveAsTable('purchaseByUser') 

для чтения и записи таблицы улья увидеть это stackoverflow question nd spark docs

Смежные вопросы