链图与Spark上的对象

时间:2017-07-04 01:41:22

标签: scala apache-spark

我正在为地图内文件的每一行读取创建一个对象。

在链式地图上,我尝试从该对象访问变量,但是我收到一个空变量。 我正在使用Spark Streamer

//..
val lines = ssc.textFileStream("CSVs/")
lines.map(line => new UserData(line)) 
     .map(userData => userData.myVar)
.print()

我的UserData类

class UserData(csvLine: String) extends Serializable{
  { 
     myVar = csvLine
  }
  var myVar = ""
}

2 个答案:

答案 0 :(得分:0)

您可以使用案例类

case class UserData(csvLine: String)

我不确定为什么你的代码中有userData.myVar,它应该是这样的:

val lines = ssc.textFileStream("CSVs/")
lines.map(line => UserData(line)) 
  .map(userData => userData.csvLine)
  .print()

ssc.start()
ssc.awaitTermination()

此外,textFileStream仅在添加或更新文件时监控文件夹。如果您只想阅读文件,可以使用spark.readsparkContext.textFile

答案 1 :(得分:0)

我做错了,因为Scala将myVar声明为空,然后我指定了行(我在该作用域上添加了println并且它被分配了),并再次将其设置为空。我将赋值移动到一个方法,它按预期工作。

acceptCreditCards