2016-08-16 2 views
0

У меня есть этот код ниже:FlatMap проходимой Ones ошибок

//TABLE FROM HIve 
val df = hiveContext.sql("select * from test_table where date ='20160721' LIMIT 300") 
//ERROR ON THE LINE BELOW 
val row = df.flatMap(row => ((row.get(0), row.get(1), row.get(2)), 1)) 

я получаю эту ошибку в коде, гласящая:

Type mismatch, expected: (Row) => Traversable[NotInferedU], actual : (Row) => ((Any, Any, Any), Int) 

Может кто-то проверить, чтобы посмотреть, что случилось в моей функции flatMap. Я не могу понять, что говорит эта ошибка.

+2

Что вы ожидаете от своего кода? Ошибка (правильно) говорит вам, что '((Any, Any, Any), Int)' не соответствует чему-то из формы 'Traversable [..]'. – Alec

+1

Можете ли вы попробовать: 'val row = df.flatMap (row => ((row.get (0), row.get (1), row.get (2)), 1) .productIterator)' Это должно преобразовать кортеж к итератору. – Samar

ответ

3

Вы, вероятно, должны использовать вместо этого map. ((row.get(0), row.get(1), row.get(2)), 1) не является Traversable, как указано в сообщении об ошибке.

+1

Не привязаны кортежи к обратимым: '((row.get (0), row.get (1), row.get (2)), 1) .productIterator' Я провел некоторое тестирование в repl и flatMap работал , – Samar

+0

не уверен, что OP хочет достичь, вместо использования 'productorIterator' вы можете просто' row => List ((row.get (0), row.get (1), row.get (2)), 1) 'in' flatMap' – ryan

+0

@ryan О, я понял, что возвращаемый тип flatMap должен быть доступен. Но дело в том, что я сказал вам с помощью строки 'row => List ((row.get (0), row.get (1), row.get (2)), 1)' будет выровнена до ' ((row.get (0), row.get (1), row.get (2)), 1), (row.get (0), row.get (1), row.get (2)), 1), (row.get (0), row.get (1), row.get (2)), 1)) ' – CapturedTree

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