【发布时间】:2019-03-06 03:42:08
【问题描述】:
我将 pyspark 和 Flask 用于交互式 spark 作为服务应用程序。 我的应用程序应该得到一些带有一些参数的请求并返回响应。我的代码在这里:
//first I make udf function
def dict_list(x, y):
return dict((zip(map(str, x), map(str, y))))
dict_list_udf = F.udf(lambda x, y: dict_list(x, y),
types.MapType(types.StringType(), types.StringType()))
//then I read my table from cassandra
df2 = spark.read \
.format("org.apache.spark.sql.cassandra") \
.options(table="property_change", keyspace="strat_keyspace_cassandra_raw2") \
.load()
@app.route("/test/<serviceMatch>/<matchPattern>")
def getNodeEntries1(serviceMatch, matchPattern):
result_df = df2.filter(df2.id.like(matchPattern + "%") & (df2.property_name == serviceMatch)) \
.groupBy("property_name") \
.agg(F.collect_list("time").alias('time'), F.collect_list("value").alias('value'))
return json.dumps(result_df.withColumn('values', dict_list_udf(result_df.time, result_df.value)).select('values').take(1))
当我启动我的服务器(使用 spark 提交)并使用 Postman 获取请求时,我第一次需要大约 13 秒来给我响应,之后每隔大约 3 秒响应。开始时延迟 13 秒为用户服务是不可接受的。我是 spark 的新用户,我假设这种行为是由于 spark 的性质造成的,但我不知道究竟是什么原因造成的。 Maube 关于缓存或编译执行计划的一些东西,比如 sql 查询。有没有机会我可以解决这个问题。 Ps 我是新用户,如果我的问题不够清楚或其他任何问题,请见谅。
【问题讨论】:
标签: apache-spark flask pyspark