我有一个函数,它接受一个字符串并使用子字符串从字符串中提取值,并使用这些值查询Cassandra表。
def formatInputString(line: String) = {
// extract values from line using sub-string and query Cassandra table.
}
如果我通过使用Source.fromFile读取文本文件来传递值,它可以工作(从Cassandra打印结果)......
// using Scala getLine()
for (line <- Source.fromFile("file.txt").getLines()) {
formatInputString(line)
}
但如果像这样使用Spark RDD,它就会挂起......
// using Spark RDD
val line = sc.textFile("file.txt")
val lst = line.map(formatInputString)
有人可以解释这种行为以及如何解决这个问题(我需要使用RDD版本)。
答案 0 :(得分:0)
Spark默认以惰性方式执行许多操作。如果您正在调用rdd.map(x =&gt;(某些元素转换)),则在执行操作之前不会进行此转换。
http://spark.apache.org/docs/latest/programming-guide.html#actions
您可以尝试拨打&#39; rdd.foreach&#39;而不是&#39; map&#39;,如上文所示。