如果我使用Spark RDD传递字符串,则对Cassandra的查询会挂起

时间:2016-06-22 15:24:15

标签: scala apache-spark cassandra

我有一个函数,它接受一个字符串并使用子字符串从字符串中提取值,并使用这些值查询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版本)。

1 个答案:

答案 0 :(得分:0)

Spark默认以惰性方式执行许多操作。如果您正在调用rdd.map(x =&gt;(某些元素转换)),则在执行操作之前不会进行此转换。

http://spark.apache.org/docs/latest/programming-guide.html#actions

您可以尝试拨打&#39; rdd.foreach&#39;而不是&#39; map&#39;,如上文所示。