我使用SJS为我的项目,并想知道如何从SJS NamedDataFrame工作。我的第一个程序就是这样做的
val schemaString = "parm1:int,parm2:string,parm3:string,parm4:string,parm5:int,parm6:string,parm7:int,parm8:int"
val schema = StructType(schemaString.split(",").map(fieldName => StructField(fieldName.split(":")(0), getFieldTypeInSchema(fieldName.split(":")(1)),true)))
val eDF1 = hive.applySchema(rowRDD1, schema)
this.namedObjects.getOrElseCreate("edf1", new NamedDataFrame(eDF1, true, StorageLevel.MEMORY_ONLY))
我的第二个程序这样做来检索DataFrame。
val eDF1: Option[NamedDataFrame] = this.namedObjects.get("eDF1")
这里我只能使用选项。我必须如何将NamedDataFrame转换为Spark DataFrame?
有类似的东西吗?
this.namedObjects.get[(Int,String,String,String,Int,String,Int,Int)]("eDF1")
谢谢! !
Edit1:准确地说,如果没有SJS持久性,这可以在df
上完成。eDF1.filter(eDF1.col("parm1")%2!==0)
如何从保存的namedObject执行相同的操作?
看一下https://github.com/spark-jobserver/spark-jobserver/blob/master/job-server-extras/src/spark.jobserver/NamedObjectsTestJob.scala的例子
NamedDataFrame
Job1
this.namedObjects.getOrElseCreate("df:esDF1", new NamedDataFrame(eDF1, true, StorageLevel.MEMORY_ONLY))
Job2
val NamedDataFrame(eDF1, _, _) = namedObjects.get[NamedDataFrame]("df:esDF1").get
现在我可以在第二个作业上操作eDF1作为spark数据帧。