Spark Scala - 使用我的数据框中的元素创建一个对象

Spark Scala - Create an object with element from my dataframe

对于我正在处理的 Scala 项目,我必须创建一个 class 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
}

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

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

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

但是因为我有很多“Tables”要创建,所以我制作了一个 csv,其中每一行都包含创建 Table 所需的值(匹配 class).我将我的 CSV 文件加载到一个名为 empDF 的 DataFrame 中,它与此匹配:

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

我想知道如何自动创建我的“Tables”元素?(并将创建的 table 添加到我的 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 class 更改为 String.