Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Stanford NLP的Spark分区问题_Apache Spark_Nlp_Stanford Nlp_Sentiment Analysis - Fatal编程技术网

Apache spark Stanford NLP的Spark分区问题

Apache spark Stanford NLP的Spark分区问题,apache-spark,nlp,stanford-nlp,sentiment-analysis,Apache Spark,Nlp,Stanford Nlp,Sentiment Analysis,我正在尝试使用spark/scala与斯坦福NLP(3.4.1)集成来处理数百万数据。 因为我使用的是社交媒体数据,所以我必须使用NLP生成主题(词性标记)和情绪计算 我必须分别处理Twitter数据和非Twitter数据 我使用每个类的lasy val初始化来加载stanfordNLP features: Seq[String] = Seq("tokenize","ssplit","pos","parse","sentiment") val props = new Properties()

我正在尝试使用spark/scala与斯坦福NLP(3.4.1)集成来处理数百万数据。 因为我使用的是社交媒体数据,所以我必须使用NLP生成主题(词性标记)和情绪计算

我必须分别处理Twitter数据和非Twitter数据

我使用每个类的lasy val初始化来加载stanfordNLP

features: Seq[String] = Seq("tokenize","ssplit","pos","parse","sentiment")
  val props = new Properties()
  props.put("annotators", features.mkString(", "))
  props.put("pos.model", "tagger/gate-EN-twitter.model")
  props.put("parse.model", "tagger/englishSR.ser.gz");
  val pipeline = new StanfordCoreNLP(props)
注意:对于上面的Twitter,我使用不同的pos模型和shift-reduce解析模型进行解析。我使用shift-reduce解析器的原因是为了一些垃圾 rum时的数据默认PCFG模型需要花费大量时间来处理和获取一些异常。Shift-reduce解析器在加载时大约需要15秒,在运行时处理数据时速度更快 数据

非维特类

 features: Seq[String] = Seq("tokenize","ssplit","pos","parse","sentiment")
    val props = new Properties()
    props.put("annotators", features.mkString(", "))
    props.put("parse.model", "tagger/englishSR.ser.gz");
这里我使用默认的pos模型和shift-reduce解析器

问题:

目前,我们使用8个节点和6个内核运行,我可以使用48个分区运行。用于处理数百万数据 使用上面的配置和较小的分区,对我来说效果很好

我们有8个节点和6个内核,几乎有48个分区,如果我使用42个分区运行,那么完成处理大约需要1小时

使用当前配置,我需要将其扩展到200个分区

8个节点和6个核心我们几乎有48个分区,如果我们运行200个分区,大约需要2小时,最后抛出一些异常,说一个节点丢失了 或java.lang.IllegalArgumentException:注释器“情感”需要注释器“二值化的树”等

问题是,如果我们将分区数量扩大到200个,有8个节点和6个核,而我们只有48个核

我怀疑它是因为加载了shift而减少了每个分区的解析器加载。我曾想过一次加载这个类,然后进行广播,但standforndNLP类不可序列化,所以我无法广播


我们需要扩展到200个分区的原因是,它运行速度快,处理这些数据的时间短。

我不理解您的消息的细节,不同的工作区/分区数量会产生明显不同的结果,但您要做的是在每个工作区上加载一次相应的CoreNLP。(您可以在一个程序中加载两个不同的CoreNLP管道。)


你试过Evan Sparks在这篇文章中描述的方法吗

您是否尝试过将NLP jar作为submit spark的一部分传递(或将其与应用程序捆绑)?实际上,调度器在远程JVM中启动任务之前,应该向工作人员发送额外的JAR。是的,我正在捆绑应用程序JAR。但是我不能用更多的分区来扩展应用程序。谢谢Christopher Manning。是的,我是。当我尝试使用tokenize、ssplit、pos时,没有问题,200分区在30分钟内获得了近一百万个数据的输出。我可以看到输出。但是当我尝试使用tokenize、ssplit、pos、parse,然后设置解析模型props.put(“parse.model”、“tagger/englishSR.ser.gz”),我得到了这个内存不足错误。它在64位机器上运行,XX:MaxPermSize=1024m,我尝试了2048,但没有成功。感谢您的关注