我有一个带有随机列数的Spark数据框架。其中一些列为array<Int>
类型。如何在数据框中找到数组列并将其转换为字符串?
例如,如果该字段为[1, 2, 3]
(int数组),则应将其转换为一个字符串{1, 2, 3}
。
过程:
df.write
.format("orc")
.mode(SaveMode.Overwrite)
.saveAsTable(s"temp_table")
答案 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