使用 apache pig 从 url 中提取主机名
extract host name from url using apache pig
例如,
url: https://pig.apache.org/docs/r0.14.0/func.html
url: http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
URL不仅仅局限于上面的例子。我想将主机名提取为:
host_name : pig.apache.org
谁能帮帮我
听起来您正在尝试做的是 运行 每个 url 上的正则表达式以提取主机名。这应该是这样的:
splt = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT(line,'.*\://(?:www.)?([^\/]+)',1))
您实际上是想提取主机名,而不是域名。 pig.apache.org
是主机名,apache.org
是域名。
幸运的是,Pig 的好心人已经编写了一个 UDF 来执行此操作。只需像这样使用 Host Extractor UDF:
host = FOREACH row GENERATE org.apache.pig.piggybank.evaluation.util.apachelogparser.HostExtractor(referer);
API 文档可在以下位置找到:
https://pig.apache.org/docs/r0.8.1/api/org/apache/pig/piggybank/evaluation/util/apachelogparser/HostExtractor.html
例如,
url: https://pig.apache.org/docs/r0.14.0/func.html
url: http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
URL不仅仅局限于上面的例子。我想将主机名提取为:
host_name : pig.apache.org
谁能帮帮我
听起来您正在尝试做的是 运行 每个 url 上的正则表达式以提取主机名。这应该是这样的:
splt = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT(line,'.*\://(?:www.)?([^\/]+)',1))
您实际上是想提取主机名,而不是域名。 pig.apache.org
是主机名,apache.org
是域名。
幸运的是,Pig 的好心人已经编写了一个 UDF 来执行此操作。只需像这样使用 Host Extractor UDF:
host = FOREACH row GENERATE org.apache.pig.piggybank.evaluation.util.apachelogparser.HostExtractor(referer);
API 文档可在以下位置找到: https://pig.apache.org/docs/r0.8.1/api/org/apache/pig/piggybank/evaluation/util/apachelogparser/HostExtractor.html