Hive UDF Текст в массив
я пытаюсь создать UDF для Hive, который дает мне больше функциональности, чем уже предоставленныйsplit()
функция.
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class LowerCase extends UDF {
public Text evaluate(final Text text) {
return new Text(stemWord(text.toString()));
}
/**
* Stems words to normal form.
*
* @param word
* @return Stemmed word.
*/
private String stemWord(String word) {
word = word.toLowerCase();
// Remove special characters
// Porter stemmer
// ...
return word;
}
}
Это работает в Улей. Я экспортирую этот класс в файл jar. Затем я загружаю его в Улей с
add jar /path/to/myJar.jar;
и создать функцию, используя I '
create temporary function lower_case as 'LowerCase';
У нас есть таблица со строковым полем. Утверждение тогда:
select lower_case(text) from documents;
Но теперь я хочу создать функцию, возвращающую массив (как, например, в split).
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class WordSplit extends UDF {
public Text[] evaluate(final Text text) {
List splitList = new ArrayList();
StringTokenizer tokenizer = new StringTokenizer(text.toString());
while (tokenizer.hasMoreElements()) {
Text word = new Text(stemWord((String) tokenizer.nextElement()));
splitList.add(word);
}
return splitList.toArray(new Text[splitList.size()]);
}
/**
* Stems words to normal form.
*
* @param word
* @return Stemmed word.
*/
private String stemWord(String word) {
word = word.toLowerCase();
// Remove special characters
// Porter stemmer
// ...
return word;
}
}
К сожалению, эта функция не работает, если я делаю ту же самую процедуру загрузки, упомянутую выше. Я'я получаю следующую ошибку:
FAILED: SemanticException java.lang.IllegalArgumentException: Error: name expected at the position 7 of 'struct' but '>' is found.
Как у меня нетя не нашел никаких документов, в которых упоминается такая трансформация, яЯ надеюсь, что у вас будет несколько советов для меня!