在 Scala 的嵌套 for 循环中更新字符串变量

Updating a string variable from within nested for loop in Scala

我有一个 Dataframe,我正在尝试将其转换为 html table 语法作为 Scala 中的字符串:

sample_df: 其类型为 DataFrame = Dataset[Row]

|Name|Country|Occupation|Years_Experience|
|Bob |USA    | Engineer |  5             |
|John|CANADA | Sales    |  3             |

我已经转换了 html headers 但是需要在字符串变量中包含 html 行和值,如下所示 html_string:

<tr>
      <td>Bob</td>
      <td>USA</td>
      <td>Engineer</td>
      <td>5</td>
</tr>
<tr>
      <td>John</td>
      <td>CANADA</td>
      <td>Sales</td>
      <td>3</td>
</tr>

然而,当我尝试下面的嵌套循环方法时,html_string 变量没有更新为我上面所期望的。结果是一片空白。我做错了什么?

代码尝试:

  var html_string = """"""

  for (i <- sample_df) {
    html_string = html_string + "<tr>"
    for (g <- i.toSeq)  {
      html_string = html_string + "<td>" + g + "</td>"
    }
    html_string = html_string + "</tr>"
  }
  println(html_string)

谢谢!

不确定您在此上下文中所说的“数据帧”是什么意思(您不能像这样迭代 spark 数据帧),但假设您谈论的是正常序列,则此 works for me.

话虽如此,这在 Scala 中是一种非常糟糕的做法。编写 Scala 代码时的基本经验法则是 永远不要使用可变变量 除非。您确切地知道为什么在特定情况下必须(这种情况极为罕见)。

   val html_string = df
     .map { _.mkString("<td>", "</td><td>", "</td>" }
     .mkString("<tr>", "</tr><tr>",  "</tr>")