как преобразовать массив любого типа данных в разделенные запятыми строки в scala

#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(", ")