【发布时间】:2015-05-19 17:39:44
【问题描述】:
我有一个关于在 1000 万长度的 spark RDD(或 scala 数组)中进行部分字符串匹配的最有效方法的问题。考虑以下几点:
val set1 = Array("star wars", "ipad") //These are the String I am looking for
val set2 = RDD[("user1", "star wars 7 is coming out"),
("user1", "where to watch star wars"),
("user2", "star wars"),
("user2", "cheap ipad")]
我希望能够计算属于 Set1 中的每个字符串在 Set2 中出现的次数。所以结果应该是这样的:
Result = ("star wars", 3),("ipad", 1)
我还想统计搜索过该词的用户(即不同用户)的数量,所以结果应该是:
Result = ("star wars", 2), ("ipad", 1)
我尝试了 2 种方法,第一种涉及将 RDD 字符串转换为 set、flatMapValues,然后进行连接操作,但它很消耗内存。我正在考虑的另一种方法是正则表达式方法,因为只需要计数并给出确切的字符串,但我不知道如何提高效率(通过创建一个函数并在映射 RDD 时调用它?)
我似乎可以在 pgsql 中使用 LIKE 轻松完成此操作,但不确定是否存在以相同方式工作的 RDD 连接。
任何帮助将不胜感激。
【问题讨论】:
-
在 rdd 转换中使用正则表达式似乎是可行的。
-
可以,但我必须对所有 1000 万行字符串都这样做,所以我认为最好是并行处理,或者至少均匀分布到每个集群。跨度>
-
@qmeeeeeee
Set1的预期大小是多少? -
@Odomontois 是 10,而且总是 10
-
@qmeeeeeee,rdd转换自动并行处理
标签: string scala apache-spark match