【发布时间】:2021-11-30 04:48:01
【问题描述】:
我有数据框 df
| name| languagesAtSchool|currentState|
+----------------+------------------+------------+
| James,,Smith|[Java, Scala, C++]| CA|
| Michael,Rose,|[Spark, Java, C++]| NJ|
|Robert,,Williams| [CSharp, VB, R]| NV|
+----------------+------------------+------------+
我想要
+----------------+--------+-----+
|Name |language|State|
+----------------+--------+-----+
|James,,Smith |Java |CA |
|James,,Smith |Scala |CA |
|James,,Smith |C++ |CA |
|Michael,Rose, |Spark |NJ |
|Michael,Rose, |Java |NJ |
|Michael,Rose, |C++ |NJ |
|Robert,,Williams|CSharp |NV |
|Robert,,Williams|VB |NV |
|Robert,,Williams|R |NV |
+----------------+--------+-----+
我已经尝试了以下完美的工作
val df2=df.flatMap(f=> f.getSeq[String](1).map((f.getString(0),_,f.getString(2))))
.toDF("Name","language","State")
但我希望在不指定要保留的其他列的情况下工作,因此我尝试了
val df2 = df.withColumn("laguage", df.flatMap(f=>f.getSeq[String](1)))
然后它给出
Unknown Error: <console>:40: error: missing parameter type
val df3 = df.withColumn("laguage", df.flatMap(f=>f.getSeq[String](1)))
^
因此,我希望 Spark 中的某些内容可以在不丢弃其他列的情况下转换列。 我猜原因是 scala 无法确定类型,但我无法修复它。 我是 scala 的新手,感谢您的帮助!
【问题讨论】:
标签: scala apache-spark types functional-programming explode