要提取文本中的国家名,我的思路是:
1. 先分词,提取出地区名
2. 将国家名通过外部文件的形式读入HASHSET
3. 对第1步中提取的地区名到2中的HASESET进行查询,如果有,则返回
当UDF需要读取外部文件时,一种方法是在注册函数时用add file 先将文件上传,但这条路我尝试之后没有走通; 第二种方法就是把外部文件先上传到HDFS的一个路径上,再在UDF逻辑中直接读取HDFS上的文件,该方法尝试通过了。源代码记录如下:
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import java.io.*;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Pattern;
public class extractCountryName extends UDF {
public Text evaluate(Text inputStr){
if(inputStr == null) return null;
Text res