将spark dataframe array[string]更改为array[double]

rdlzhqv9  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(851)

我是scala的新手,我有以下问题。
我有一个sparkDataframe,其模式如下:

df.printSchema()    
root
     |-- word: string (nullable = true)
     |-- vector: array (nullable = true)
     |    |-- element: string (containsNull = true)

我需要将其转换为以下模式:

root
 |-- word: string (nullable = true)
 |-- vector: array (nullable = true)
 |    |-- element: double (containsNull = true)

我不想预先指定模式,而是更改现有的模式。
我试过以下方法

df.withColumn("vector", col("vector").cast("array<element: double>"))

我还尝试将其转换为rdd,以使用map更改元素,然后将其转换回dataframe,但我得到以下数据类型 Array[WrappedArray] 我不知道该怎么处理。
使用pyspark和numpy,我可以通过 df.select("vector").rdd.map(lambda x: numpy.asarray(x)) .
任何帮助都将不胜感激。

wecizke3

wecizke31#

你很接近。请尝试以下代码:

val df2 = df.withColumn("vector", col("vector").cast("array<double>"))

相关问题