【问题标题】:Spark SQL 2.3 - Slow search results for LIKE '%message%'Spark SQL 2.3 - LIKE '%message%' 的搜索结果缓慢
【发布时间】:2018-10-20 12:23:00
【问题描述】:

我得到 log4j 格式的日志,处理它们并将它们存储在 Spark 中。我不在集群或多节点环境中。使用 Spark 作为单节点应用程序。我只是 spark 的初学者,通过编写应用程序来学习概念。我使用 Spark 作为后端而不是 DB(MySQL),因此处理速度比 DB(数百万条记录)快得多。我希望这很好。

使用 Spark SQL,尝试通过以下查询获取记录。

qry = qry + " error LIKE '%" + errormsg + "%' ";
List<Row> allrows = logDataFrame.filter(qry).collectAsList();

目前 Spark 拥有 100 万条记录。此查询需要 6 秒 来获取 1000 条记录。

这是 Spark 的错误用法吗?我不这么认为,这是 spark 必须处理记录并尽快获取记录的地方。如果我的理解有误,请纠正我。

我很困惑为什么要花这么长时间来获取记录。

我是否需要调整 Spark 或其他任何配置?请提出建议。

在错误模式下使用我的应用程序:

SparkContext sc = spark.sparkContext();
sc.setLogLevel("ERROR");

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql spark-dataframe spark-streaming


    【解决方案1】:

    这是 Spark 的错误用法吗?

    这只是一种观点,但我会说它绝对是。您似乎要寻找的是具有全文搜索功能的数据库或搜索引擎,而不是 Spark,后者并非旨在用作其中任何一个。

    尽管有 SQL 组件,但它肯定不能替代 MySQL。

    我不这么认为,这是 spark 必须处理记录并尽快获取记录的地方。

    这不是 Spark 的用例。虽然 Spark 慢慢演变为低延迟流引擎,但它从未设计用于低延迟交互式查询。它主要针对音量而非速度进行优化。

    虽然一些基于相等性的谓词可以通过正确的存储进行优化,但像字符串匹配这样的查询必须检查每一行数据,这使得这个过程非常昂贵。

    【讨论】:

    • 您能否提出任何替代方案来实现这一目标?我不想要数据库,我正在开发一个桌面应用程序,它不需要任何其他服务器或服务应该从外部启动。只需一个 JVM 即可容纳所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多