如何在scala dataframe中将Array [Long]转换为Vector类型?

mark_test

我有这样的数据框:

+------+-----+-------------------+--------------------+
|    Id|Label|          Timestamp|         Signal_list|
+------+-----+-------------------+--------------------+
|A05439|    1|2014-05-20 05:05:21|[-116, -123, -129...|
|A06392|    1|2013-12-27 04:12:33|[260, 314, 370, 4...|
|A08192|    1|2014-06-03 04:06:15|[334, 465, 628, 8...|
|A08219|    3|2013-12-31 03:12:41|[-114, -140, -157...|
|A02894|    2|2013-10-28 06:10:53|[109, 139, 170, 1...|

该数据帧信号列表有9k个元素,我想将信号列表列转换为向量。我尝试了以下UDF:

import org.apache.spark.ml.linalg._

val convertUDF = udf((array : Seq[Long]) => {
  Vectors.dense(array.toArray)
})
val afWithVector = afLabel.select("*").withColumn("Signal_list", convertUDF($"Signal_list"))

但是它给出了错误:

console>:39: error: overloaded method value dense with alternatives:
  (values: Array[Double])org.apache.spark.ml.linalg.Vector <and>
  (firstValue: Double,otherValues: Double*)org.apache.spark.ml.linalg.Vector
 cannot be applied to (Array[Long])
         Vectors.dense(array.toArray)

数据框方案:

|-- Id: string (nullable = true)
 |-- Label: integer (nullable = true)
 |-- Timestamp: string (nullable = true)
 |-- Signal_list: array (nullable = true)
 |    |-- element: long (containsNull = true)

我是使用Scala的新手,使用pyspark的答案会更有用。

ido堂

UDF几乎是正确的。问题在于,Spark中的向量只能使用双精度,不能接受多头。在Scala中,更改如下所示:

val convertUDF = udf((array : Seq[Long]) => {
  Vectors.dense(array.toArray.map(_.toDouble))
})

我相信在Python中,它看起来像这样:

udf(lambda vs: Vectors.dense([float(i) for i in vs]), VectorUDT())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中将String类型转换为Class类型

如何在Java中将Long转换为int?

如何在scala中将Map值转换为集合

如何在Scala中将DataFrame转换为RDD?

如何在Spark中将熊猫的DataFrame转换为DataFrame或LabeledPoint?

如何在Scala中将选项[String]转换为列表[String]

如何在Delphi中将通用类型转换为实际类型

如何在Spark 2 Scala中将Row转换为json

如何在Oracle DB中将CLOB类型列转换为LONG类型列

如何在Spark DataFrame,Scala中将行转换为列

如何在Scala中将DataFrame转换为DynamicFrame对象

如何在Scala的Apache Spark中将RDD(读取文本文件的目录)转换为dataFrame?

如何在Spark / Scala中将Array [String]转换为Array [Any]

如何在scala中将java列表转换为数组?

如何在Scala中将列表列表转换为列表?

如何在scala中将“ Some(123)”转换为123

如何在Scala中将Excel日期长类型转换为时间戳

如何在Zeppelin(Scala)中将数据帧转换为Seq

如何在scala中将列表转换为Json数组

如何在scala中将地图转换为重复的元组

如何在Scala中将Array [(Double,Double)]转换为Array [Double]?

如何在Scala中将java.util.Set [Field]转换为Array [Field]?

如何在Scala中将类型为Map [String,Map [String,Any]]的嵌套映射转换为JSON?

如何在Scala中将JSON文件的记录转换为列表

如何在 Scala 中将映射、序列和基本类型的任何嵌套组合转换为 JSON?

如何在 Scala 中将 Spark Dense Vector 转换为 String 并返回 Vector?

如何在 spark/scala 中将行转换为列?

如何在 Scala 中将杂乱无章的文本文件转换为 Array[String]?

如何在C中将long转换为char?