Я использую pyspark и Flask для интерактивной искры в качестве сервисного приложения.
Мое приложение должно получить запрос с некоторыми параметрами и вернуть ответ обратно. Мой код здесь:
//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 submit) и использую Postman для запроса на получение, мне сначала требуется около 13 секунд, чтобы дать мне ответ, а после этого каждый второй ответ занимает примерно 3 секунды. Обслуживать пользователей с задержкой в 13 секунд поначалу не допустимо. Я новый пользователь искры, и я предполагаю, что это поведение связано с природой искры, но я не знаю, что именно вызывает это. Можно что-то сказать о кешировании или компиляции плана выполнения, например SQL-запросы. Есть ли шанс, что я смогу решить эту проблему. Ps Я новый пользователь, так что извините, если мой вопрос не достаточно ясен или что-то еще.