我有一个字符串的RDD。每行对应各种日志。
我在一个单独的函数中有多个正则表达式,匹配/表示RDD的行以应用适应的正则表达式。
我想在RDD上映射这个独特的函数,因此它可以快速处理每一行,并存储在另一个全局rdd中处理的每一行。
问题是,由于我希望将此任务并行化,因此必须同时访问我的全局RDD才能添加每个已处理的行。
我想知道是否有其他方法可以做到这一点或任何事情!我正在寻求提高我的火花技能。
例如,这就是我想做的事情:
我有一个类似的文本:
错误:Hahhaha param_error = 8 param_err2 = https
警告:HUHUHUHUH param_warn = tchu param_warn2 = wifi
我的正则表达式函数会将包含“ERROR”的行与数组匹配,例如Array("Error","8","https")
另一个正则表达式函数将包含“WARNING”的行与数组匹配,例如Array("Warning","tchu","wifi")
最后,我想为处理的每一行获得RDD[Array[String]]
。
如何使其与Spark并行化?
答案 0 :(得分:2)
首先,重要的是要理解Spark中没有“全局RDD”,也没有理由需要这样的东西。使用Spark时,您应该考虑将转换一个RDD转换为另一个RDD而不是更新 RDD(这是不可能的 - RDD 不可变)。每个这样的转换将由Spark分布式(并行)执行。
在这种情况下,如果我正确理解您的要求,您需要map
将每条记录转换为以下结果之一:
Array[String]
,其中第一项是"ERROR"
,或者:Array[String]
,其中第一项是"WARNING"
,或者:为此,您可以使用map(f)
的{{1}}和collect(f)
方法:
RDD