<p>下面是Scala中的另一个版本:</p>
<pre><code>data.printSchema
root
| Int_Col1: integer (nullable = false)
| Str_Col1: string (nullable = true)
| Float_Col1: float (nullable = false)
| Float_Col2: float (nullable = false)
| Str_Col2: string (nullable = true)
| Float_Col3: float (nullable = false)
data.show()
+ + + + + + +
|Int_Col1|Str_Col1|Float_Col1|Float_Col2|Str_Col2|Float_Col3|
+ + + + + + +
| 1| ABC| 10.99| 20.99| a| 9.99|
| 2| XYZ| 999.1343| 9858.1| b| 488.99|
+ + + + + + +
</code></pre>
<p>添加一个新的<code>array<float></code>字段来连接所有<code>float</code>值。在</p>
^{pr2}$
<p>然后过滤所需的数据类型并使用<code>foldLeft</code>连接浮点列</p>
<pre><code>df.dtypes
.collect{ case (dn, dt) if dt.startsWith("FloatType") => dn }
.foldLeft(df)((accDF, c) => accDF.withColumn("Float_Arr_Col",
array_union(col("Float_Arr_Col"),array(col(c)))))
.show(false)
</code></pre>
<p>输出:</p>
<pre><code>+ + + + + + + +
|Int_Col1|Str_Col1|Float_Col1|Float_Col2|Str_Col2|Float_Col3|Float_Arr_Col |
+ + + + + + + +
|1 |ABC |10.99 |20.99 |a |9.99 |[10.99, 20.99, 9.99] |
|2 |XYZ |999.1343 |9858.1 |b |488.99 |[999.1343, 9858.1, 488.99]|
+ + + + + + + +
</code></pre>
<p>希望这有帮助!在</p>