加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

VectorAssembler不支持StringType类型的scala spark转换

发布时间:2020-12-16 09:56:59 所属栏目:安全 来源:网络整理
导读:我有一个包含字符串列的数据框,我打算使用它作为k-means的输入使用spark和 scala.我正在使用以下方法转换数据框的字符串类型列: val toDouble = udf[Double,String]( _.toDouble) val analysisData = dataframe_mysql.withColumn("Event",toDouble(datafram
我有一个包含字符串列的数据框,我打算使用它作为k-means的输入使用spark和 scala.我正在使用以下方法转换数据框的字符串类型列:

val toDouble = udf[Double,String]( _.toDouble) 
 val analysisData  = dataframe_mysql.withColumn("Event",toDouble(dataframe_mysql("event"))).withColumn("Execution",toDouble(dataframe_mysql("execution"))).withColumn("Info",toDouble(dataframe_mysql("info")))              
 val assembler = new VectorAssembler()
    .setInputCols(Array("execution","event","info"))
    .setOutputCol("features")
val output = assembler.transform(analysisData)
println(output.select("features","execution").first())

当我打印analyzeData模式时,转换是正确的.但我得到一个例外:VectorAssembler不支持StringType类型
这意味着我的价值观仍然是字符串!如何转换值而不仅仅是模式类型?

谢谢

解决方法

实际上,VectorAssembler Transformer不接受字符串.因此,您需要确保列与数字,布尔值,矢量类型匹配.确保您的udf正在做正确的事情,并确保没有任何列具有StringType.

要将Spark DataFrame中的列转换为另一种类型,请将其简化并使用cast()DSL函数,如下所示:

val analysisData  = dataframe_mysql.withColumn("Event",dataframe_mysql("Event").cast(DoubleType))

它应该工作!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读