【问题标题】:Executing spark first time takes approximately 13 seconds, but second, and every other time it takes 3.5 seconds第一次执行 spark 大约需要 13 秒,但第二次,每隔一次执行需要 3.5 秒
【发布时间】: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


    【解决方案1】:

    完全可以预料到这种延迟。跳过一个简单的事实,即 Spark 并非旨在直接嵌入到交互式应用程序中(也不适合实时查询),这只是一个显着的开销

    • 正在初始化上下文。
    • 从集群管理器获取资源。
    • 从 Cassandra 获取元数据。

    问题是在这里使用 Spark 是否有意义 - 如果您需要接近实时的响应,并且您将完整的结果收集给驱动程序,那么使用 native Cassandra connector 应该是更好的选择。

    但是,如果您计划执行 Cassandra 本身不支持的逻辑,那么您所能做的就是接受这种间接架构的成本。

    【讨论】:

    • 这只是为了测试。问题是 cassandra 的 CQL 不支持分组和聚合,所以我正在测试不同的方法。谢谢你的回答,很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 2021-04-17
    相关资源
    最近更新 更多