微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ElasticSearch+Pyspark 读取速度慢

如何解决ElasticSearch+Pyspark 读取速度慢

我想使用 Pyspark 从 Elasticsearch 获取一些查询结果,但我的阅读性能太慢了。我在我的 spark-class 中使用了 1 个工作节点和 1 个主节点,这是我创建的 SparkSession 代码

'''

spark = SparkSession\
        builder\
        appName\
        config("spark.executor.memory","1g")\
        config("spark.executor.cores","4")\
        config("spark.driver.cores","1")\
        config("spark.driver.memory","1g")\
        config("spark.cores.max","15")\
        config("spark.es.mapping.date.rich","false")\

'''

而我阅读的 DataFrame 代码

'''

df =  spark.read.format("org.elasticsearch.spark.sql")\
      .option("es.nodes","IP")
      .option("es.nodes.wan.only","true")
      .option("es.port","port")
      .option("es.scroll.size","10000")
      .option("es.scroll.keepalive","10m")
      .option("es.batch.size.entries","2000")
      .option("numPartitions","100")
      .load("myindex")

'''

当我使用此 numPartitions 选项提交数据帧时,当我运行 df.rdd.getNumPartitions() 时,我的数据帧分区号仍为“1”,但随后我可以使用 repartition(100) 重新运行。但我还是不明白为什么我的 numPartitions 选项一开始就不起作用。

因此,当我进行一些过滤和选择然后运行 ​​collect() 时,我的工作在第 0 阶段需要花费大量时间。

当我查看 localhost:4040 时,我可以清楚地看到我的工作有两个阶段,阶段 0 只在一个执行程序中运行并且需要很多时间,但阶段 2 可以执行并行作业。为什么我的第 0 阶段需要这么长时间,而我不能在那个问题上做任何并行任务?

感谢您的建议。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。