我有一个Spark DataFrame,其中有一列包含向量值。这些向量值都是n维的,即长度相同。我还有一个列名列表Array("f1", "f2", "f3", ..., "fn")
,每个元素对应于向量中的一个元素。
some_columns... | Features
... | [0,1,0,..., 0]
to
some_columns... | f1 | f2 | f3 | ... | fn
... | 0 | 1 | 0 | ... | 0
什么是实现这个的最佳方式?我想到了一种方法,就是使用
createDataFrame(Row(Features), featureNameList)
创建一个新的 DataFrame,然后与旧 DataFrame 进行连接,但这需要 spark context 来使用 createDataFrame。 我只想转换现有的数据框。我也知道用.withColumn("fi", value)
,但如果 n 很大怎么办?我是 Scala 和 Spark 的新手,找不到任何好的示例。我认为这可能是一个常见的任务。我的特殊情况是我使用了
CountVectorizer
,希望为了更好的可读性而单独恢复每个列,而不仅仅是向量结果。
id
(实际上不仅仅是id
,应该是所有其他现有列)和f1,f2...
列的df。这样,df就可以在原地修改。这对你来说可能很明显,但我想学习正确的方法,因为我还不太熟悉Scala。 - Logan YangdfArr.select( (col("id") +: sqlExpr) :_*).show(false)
。这将把列id
前置到sqlExpr
数组中,然后将其传递给select
函数。同时请注意,没有进行原地更改。dfArr.select( (col("id") +: sqlExpr) :_*)
将返回一个新的数据框。因为数据框是不可变的,所以df
仍将保留原始内容。 - philantrovertdfArr.select( (col("*") +: sqlExpr) :_*)
。 - Logan Yang