小编Dmi*_*uev的帖子

Spark:使用ElasticSearch索引优化联接

因此,我正在学习通过Apache Spark从ElasticSearch中获取数据。假设我已连接到具有“用户”索引的ElasticSearch。

sqlContext = SQLContext(sc)
usersES=sqlContext.read.format('org.elasticsearch.spark.sql').option('es.nodes','mynode').load('users/user')
Run Code Online (Sandbox Code Playgroud)

说明(usersES)向我展示了这一点:

==身体计划==

扫描ElasticsearchRelation(Map(es.nodes-> mynode,es.resource-> users / user),org.apache.spark.sql.SQLContext @ 6c78e806,None)[about#145,activities#146,bdate#147,uid #148]

当我使用过滤器时:

usersES.filter(usersES.uid==1566324).explain()
Run Code Online (Sandbox Code Playgroud)

==物理计划==过滤器(uid#203L = 1566324)+-扫描ElasticsearchRelation(Map(es.nodes-> mynode,es.resource-> users / user),org.apache.spark.sql.SQLContext @ 6c78e806,无)[大约#145,活动#146,约会(bdate)#147,uid#148] PushedFilters:[EqualTo(uid,1566324)]

如您所见,Spark优雅地将过滤器推送到ElasticSearch,使索引搜索既快速又舒适。

但是,当我尝试将usersES与另一个数据帧结合在一起时,总是会遇到相同的问题: Spark会扫描整个ElasticSearch索引,而不是推送我提供的任何过滤器。 例如:

a = sc.parallelize([1566324,1566329]).map(Row('id')).toDF()
a.join(usersES, usersES.uid==a.id).explain()
Run Code Online (Sandbox Code Playgroud)

显示:

SortMergeJoin [id#210L],[uid#203L]:-排序[id#210L ASC],false,0:+-TungstenExchange hashpartitioning(id#210L,200),无:+-ConvertToUnsafe:+-扫描ExistingRDD [id #210L] +-排序[uid#203L ASC],false,0 +-TungstenExchange hashpartitioning(uid#203L,200),无+-ConvertToUnsafe +-扫描ElasticsearchRelation(Map(es.nodes-> mynode,es.resource- >用户/用户),org.apache.spark.sql.SQLContext @ 6c78e806,无)[关于#145,活动#146,生日日期147,uid#148]

请告诉我,是否可以在联接内部的Elasticsearch中推送过滤器?

elasticsearch apache-spark

5
推荐指数
1
解决办法
834
查看次数

Flask request.form.get 太慢?

我将 Flask 用于我的 Web Api 服务。

发现我的服务有时(1/100 请求)响应非常慢(秒),我开始调试,这表明有时服务在读取请求字段时挂起。

@app.route('/scan', methods=['POST'])
def scan():
    start_time = time.time()
    request_description = request.form.get('requestDescription')
    end_time = time.time()
    app.logger.debug('delay is ' + end_time-start_time)
Run Code Online (Sandbox Code Playgroud)

在这里我发现 start_time 和 end_time 之间的延迟可以达到 2 分钟。

我读过有关使用 Flask 的 Werkzeug 作为生产服务器的信息,因此我尝试将 Gunicorn 作为替代方案 - 同样的事情。

我觉得我的问题有点类似于这个,不同的是另一台服务器没有解决问题。

我尝试使用cProfile和SnakeViz分析应用程序,但使用非生产 Werkzeug 服务器 - 因为我不知道如何分析在 Gunicorn 上运行的 python 应用程序。(也许这里有人知道怎么做?)

我的 POST 请求包含描述和文件。该文件的大小可能会有所不同,但日志显示无论文件大小如何,问题都会重现。

人们通常也说Flask应该用在Nginx-[普通服务器]-flask组合中,但我使用Openshift内部的服务,我怀疑这是否有意义。(HaProxy 作为平衡器工作)

所以我的设置:Alpine 3.8.1 Gunicorn:workers:3 线程:1

当我调用它时,引擎盖下会发生什么?

request.form.get('requestDescription')
Run Code Online (Sandbox Code Playgroud)

如何在 Gunicorn 下分析 Python 代码?有没有其他人遇到过这样的问题?

任何帮助将不胜感激

python cprofile flask gunicorn snakeviz

5
推荐指数
1
解决办法
353
查看次数