hiveカスタム関数フィルタemoj表情子

1229 ワード

mysql挿入データ問題:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8D\xE8\xBE…’ for column ‘job_title’ at row 1
問題原因:データの中でEmoj表情の内容が存在して、1文字ごとに4バイトを占有して、Mysqlの中でutf-8はデフォルトで最大3バイトを支持して、超長くて、だから報告は間違っています.解決策:
(1)比較的新しいバージョンのMysqlで、utf 8 mb 4(2)hiveデータ処理を選択してEmoj表情内容(Emojデータは一般的に不要)をフィルタリングし、処理後にMySQLデータベースに統合する.カスタム関数create temporary function StringFilter as'UpUDF.StringFilter’ using jar ‘hdfs://namenodeha/user/p66_u1038_upp_ludp1/tmp/StringFilter.jar’; カスタム関数コードは次のとおりです.
import org.apache.commons.lang3.CharEncoding;
import org.apache.commons.lang3.CharUtils;
import org.apache.hadoop.hive.ql.exec.UDF;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

/***
 *   emoj   
 *
 */
public class StringFilter extends UDF {
    public String evaluate(String str){
        if(str == null || str == ""){
            return null;
        }else{
            StringBuilder sb = new StringBuilder();
            byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
            for(int i=0; i