【发布时间】:2019-04-12 16:50:55
【问题描述】:
我需要在 PySpark-Sql 中使用语言属性丰富我的数据框,该属性基本上告诉每一行论文标题的语言。我只需要过滤掉英文论文。我有几千万篇论文,所以我需要并行处理。
在集群上安装库后,我使用名为 langdetect (https://pypi.org/project/langdetect/) 的 Python 库注册了 UDF。我正在使用以下代码:
from langdetect import detect
def lang_detector(_s):
try:
lan = detect(_s)
except:
lan = 'null'
return lan
detect2 = udf(lang_detector, StringType())
papers_abs_fos_en = papers_abs \
.join(papersFos_L1, "PaperId") \
.withColumn("Lang", detect2(col("PaperTitle"))) \
.filter("Lang =='en'") \
.select("PaperId", "Rank", "PaperTitle", "RefCount", "CitCount", "FoSList")
它有效,但即使在 ca 10M 标题上也需要很长时间。我不确定这是由于 langdetect、UDF 还是我做错了什么,但我将不胜感激任何建议!
非常感谢! 保罗
【问题讨论】:
-
UDF 是这里的主要问题,我认为您无能为力。阅读此post 了解更多信息。我们曾经使用 langdetect 检测 160000 条文本,大约需要 45 分钟。