#arrays #string #scala #apache-spark #int
#массивы #строка #scala #apache-spark #int
Вопрос:
Мой текущий код :
schema.fields.foreach(f => {
if (f.dataType.typeName == "array") {
throw ArrayDataTypeNotSupportedException(s"${f.name} column is ArrayType, "
"writing arrays to CSV isn't supported. Please convert this column to a different data type.")
}
})
в настоящее время мы не поддерживаем массивы в csv, но теперь хотим поддерживать массив любого типа данных, преобразуя его в строки. Строка должна быть разделена запятой.
Тестовый пример:
test("testArrayInSchema") {
val df = spark.createDataFrame(Seq(
TestDataSetArrays(
Array(1, 2, 3),
Array("a", "b", "c"),
Array(new Timestamp(0), new Timestamp(1), new Timestamp(3))
)
))
assertThrows[ArrayDataTypeNotSupportedException] {
writeDataFrame(df)
}
Теперь нам нужно удалить это исключение, поскольку нам нужно поддерживать массивы, преобразуя их в строку
Комментарии:
1. что, если снова использовать его вложенную структуру? например, array<struct> или array<map>
2. @Someshwar Kale у нас будут данные, подобные указанным выше в тестовом примере, поэтому мы можем выполнить проверку ниже, чтобы проверить, поступает ли array<anytype>, а затем преобразовать его в строку, разделенную запятой: schema. поля.foreach(поле => поле.Тип данных соответствует { case ArrayType: ArrayType => // преобразовать массив<любой> в строку concat_ws(«,», col(field.name )).как(field.name ) case _ => col(field.name ) } )
Ответ №1:
Чтобы преобразовать массив в строку, разделенную запятыми, вы можете использовать метод mkString(«, «), например:
val arr = Array("test1", "test2")
arr.mkString(", ")