Я пишу UDF в Python для запроса Hive на Hadoop. В моей таблице есть несколько полей bigint
и несколько полей string
.Сохранение типов данных столбцов в выходном сигнале Hadoop UDF (потоковое)
My UDF изменяет поля bigint
, вычитает измененные версии в новый столбец (также должен быть числовым) и оставляет поля string
как есть.
Когда я запускаю свой UDF в запросе, все результаты - string
.
Как сохранить или указать типы в моем выходе UDF?
Подробнее:
Моего Python UDF:
import sys
for line in sys.stdin:
# pre-process row
line = line.strip()
inputs = line.split('\t')
# modify numeric fields, calculate new field
inputs[0], inputs[1], new_field = process(int(inputs[0]), int(inputs[1]))
# leave rest of inputs as is; they are string fields.
# output row
outputs = [new_field]
outputs.extend(inputs)
print '\t'.join([str(i) for i in outputs]) # doesn't preserve types!
Я сохранил эту UDF, как myudf.py
и добавил его в улей.
Мой Улей запрос:
CREATE TABLE calculated_tbl AS
SELECT TRANSFORM(bigintfield1, bigintfield2, stringfield1, stringfield2)
USING 'python myudf.py'
AS (calculated_int, modified_bif1, modified_bif2, stringfield1, stringfield2)
FROM original_tbl;