Apache spark 第一次执行spark大约需要13秒,但是第二次,每隔3.5秒执行一次
我正在使用pyspark和Flask作为交互式spark服务应用程序。 我的应用程序应该得到一些带有参数的请求并返回响应。我的代码在这里:Apache spark 第一次执行spark大约需要13秒,但是第二次,每隔3.5秒执行一次,apache-spark,flask,pyspark,Apache Spark,Flask,Pyspark,我正在使用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.
//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))
//首先我创建udf函数
定义目录列表(x,y):
返回dict((zip(map(str,x),map(str,y)))
dict_list_udf=F.udf(λx,y:dict_list(x,y),
types.MapType(types.StringType(),types.StringType())
//然后我读了卡桑德拉的表格
df2=spark.read\
.format(“org.apache.spark.sql.cassandra”)\
.options(table=“property\u change”,keyspace=“strat\u keyspace\u cassandra\u raw2”)\
.load()
@应用程序路径(“/test/”)
def getNodeEntries1(服务匹配,匹配模式):
结果\u df=df2.filter(df2.id.like(matchPattern+“%”)和(df2.property\u name==serviceMatch))\
.groupBy(“财产名称”)\
.agg(F.collect_list(“time”).别名(“time”)、F.collect_list(“value”).别名(“value”))
返回json.dumps(result_df.withColumn('values',dict_list_udf(result_df.time,result_df.value))。选择('values')。获取(1))
当我启动我的服务器(使用spark submit)并使用Postman处理get请求时,我第一次给出响应大约需要13秒,之后每一次响应大约需要3秒。不接受先延迟13秒为用户服务。我是spark的新用户,我假设这种行为是由于spark的性质造成的,但我不知道到底是什么原因造成的。可能是关于缓存或编译执行计划(如sql查询)的事情。我有没有可能解决这个问题。Ps我是新用户,所以如果我的问题不清楚或其他什么,我很抱歉 这种延迟是完全可以预料的。跳过Spark不是直接嵌入到交互式应用程序中使用的(也不适用于实时查询)这一简单事实,只会带来很大的开销
- 正在初始化上下文
- 从群集管理器获取资源
- 正在从Cassandra获取元数据
但是,如果您计划执行Cassandra本身不支持的逻辑,那么您所能做的就是接受这种间接架构的成本。这只是为了测试。问题是cassandra的CQL不支持分组和聚合,所以我正在测试不同的方法。谢谢你的回答,这很有帮助。