Кодировка Pig base 64/сохранение одной строки на запись/удаление новых строк

Я пытаюсь сохранить некоторые данные кортежей свиней по одному в строке для последующей обработки внешней системой.

Одно из моих полей — это массив байтов, представляющий не очень хорошо структурированный html, содержащий символы новой строки.

Я пытался использовать REPLACE($0.raw,'(\r\n|\n|\t)','')), но безрезультатно, так как он требует chararray и возвращает ошибки, когда я пытался его бросить.

Сжатие кортежа, если оно гарантирует одну строку, решит мою проблему.

Есть ли простой способ убедиться, что запись будет храниться в одной строке (за исключением написания пользовательской UDF, хотя уже существующая будет идеальной)?


person ellimilial    schedule 19.09.2013    source источник


Ответы (1)


В конце концов я реализовал собственный UDF для преобразования bytearray в base64, который затем применил к полю-виновнику через стандартный res = FOREACH parsed GENERATE my.little.pony.udf.package.ByteArrayToByteArrayB64($0.raw);

Определение UDF:

package my.little.pony.udf.package;
import java.io.IOException;
import javax.xml.bind.DatatypeConverter;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.DataByteArray;

public class ByteArrayToByteArrayB64 extends EvalFunc<DataByteArray> {
    public DataByteArray exec(Tuple input) throws IOException {
        if (input == null || input.size() == 0)
        return null;
        try{
            if (input.size() < 1){
                throw new IOException("Input is of size:"+input.size());
            }       

            DataByteArray data = (DataByteArray)input.get(0);
            String convertedBase64 = DatatypeConverter.printBase64Binary(data.get()); 
            return new DataByteArray(convertedBase64.getBytes("UTF-8"));


        }catch (ClassCastException e){
             throw new IOException("Tuple element at is really of type:"+input.get(0).getClass().getName());
        }catch(Exception e){
             throw new IOException("Caught exception processing input row ", e);
         }
    }
}
person ellimilial    schedule 20.09.2013