Spark Scala-从我的数据帧中创建一个带有元素的对象



对于我正在进行的Scala项目,我必须创建一个类Table,如下所示:

class Table(PbddName : String , PTableName: String, POutputFilename: String="", PFilteringFlag: Boolean=true) {
var bddName : String = PbddName
var TableName: String = PTableName
var OutputFilename: String = POutputFilename
var FilteringFlag: Boolean =PFilteringFlag
}

要创建一个表,我在Scala object:中使用此代码

val randomName = new Table(bddName, blablaTableName, blablaOutputFilename,blablaFilteringFlag)
list_tables+=randomName

我还将它添加到list_Tables中,它显然列出了所有的表。

但由于我有很多";表格";为了创建,我制作了一个csv,其中每一行都包含创建表所需的值(与类的值匹配(。我在一个名为empDF的DataFrame中加载了我的CSV文件,该文件与以下内容匹配:

|bdd_name|    table_name|     file_name|filtering_flag|
+--------+--------------+--------------+--------------+
|    bdd1|name1tablename| name1Filename|          true|
|    bdd2|name2tablename| name2Filename|          true|
|    bdd3|name3tablename| name3Filename|         false|
|    bdd4|name4tablename| name4Filename|          true|
+--------+--------------+--------------+--------------+

我想知道如何自动创建我的";表格";元素?(并将创建的表添加到我的list_Tables中(。我不确定,但我想我可能必须以某种方式浏览我的数据帧,才能在读取的每一行创建元素。

此外,每个val名称(此处为randomName(必须不同,但可以是随机的。

如果你对我如何做到这一点有任何想法或线索,那将对我有很大帮助。

谢谢你的帮助。

我找到了一个解决方案来做我想做的事情:

for (row <- empDF.rdd.collect) {
var bddname = row.mkString(",").split(",")(0)
var tablename = row.mkString(",").split(",")(1)
var Outputfilename = row.mkString(",").split(",")(2)
var filteringflag = row.mkString(",").split(",")(3)

val nomtable =new Table(bddname, tablename, Outpufilename, filteringflag, tablename)
list_tables +=nomtable
}

实际上,我不需要为所有的表使用不同的名称,所以这个解决方案在这一点上对我有效。唯一的问题是,我不能为StringBoolean处理相同的方法,所以我不得不将Table类中的所有元素都更改为String。

相关内容

最新更新