如何将数据框中的数组类型列转换为字符串

时间:2020-04-21 07:54:39

标签: scala apache-spark

我有一个带有随机列数的Spark数据框架。其中一些列为array<Int>类型。如何在数据框中找到数组列并将其转换为字符串?

例如,如果该字段为[1, 2, 3](int数组),则应将其转换为一个字符串{1, 2, 3}

过程:

  df.write
    .format("orc")
    .mode(SaveMode.Overwrite)
    .saveAsTable(s"temp_table")

2 个答案:

答案 0 :(得分:0)

您可以将列定义为字符串类型。关于如何将整数数组转换为字符串:

val a = [1, 2, 3]
val b = a.map(x => x.toString).mkString(",")

b包含您要写入的值。

关于如何查找给定列包含的数据类型的部分,您可以创建一个列数组及其相应数据类型的数组。

val colName = df.columns
val colType = df.schema.fields.map(x=>x.dataType).map(x=>x.toString)

colType包含对应列包含的数据类型。请注意,您可能必须编写一个简单的解析器来检查数据类型。

您还可以删除map(x=>x.toString),然后使用来检查i^{th}

colType(i).isInstanceOf[org.apache.spark.sql.types.ArrayType]

//returns true for arrays

答案 1 :(得分:0)

您可以在数组上使用mkstring转换为单个字符串

val s=Array(1,2,3)
val str=s.mkString(",")

o / p:

str: String = 1,2,3