Как добавить многомерный массив в существующий Spark DataFrame - PullRequest
0 голосов
/ 30 октября 2018

Если я правильно понимаю, ArrayType можно добавить как столбцы Spark DataFrame. Я пытаюсь добавить многомерный массив в существующий Spark DataFrame с помощью метода withColumn. Моя идея состоит в том, чтобы этот массив был доступен в каждой строке DataFrame, чтобы использовать его для отправки информации из функции map.

Полученная ошибка говорит о том, что функция withColumn ищет тип Column, но получает массив. Существуют ли другие функции, которые позволят добавить ArrayType?

    object TestDataFrameWithMultiDimArray {
  val nrRows = 1400
  val nrCols = 500

  /** Our main function where the action happens */
  def main(args: Array[String]) {

    // Create a SparkContext using every core of the local machine, named RatingsCounter
    val sc = new SparkContext("local[*]", "TestDataFrameWithMultiDimArray")  
    val sqlContext = new SQLContext(sc)

    val PropertiesDF = sqlContext.read
    .format("com.crealytics.spark.excel")
    .option("location", "C:/Users/tjoha/Desktop/Properties.xlsx")
    .option("useHeader", "true")
    .option("treatEmptyValuesAsNulls", "true")
    .option("inferSchema", "true")
    .option("addColorColumns", "False")
    .option("sheetName", "Sheet1")
    .load()

    PropertiesDF.show()
    PropertiesDF.printSchema()

    val PropertiesDFPlusMultiDimArray = PropertiesDF.withColumn("ArrayCol", Array.ofDim[Any](nrRows,nrCols))

  }

Спасибо за вашу помощь.

С уважением,

Johann

1 Ответ

0 голосов
/ 30 октября 2018

В вашем коде 2 проблемы

  1. 2-й аргумент withColumn должен быть Column. Вы можете перенести постоянное значение с помощью функции col
  2. Spark не может принять Any в качестве типа столбца, вам нужно использовать определенный поддерживаемый тип.

    val PropertiesDFPlusMultiDimArray = PropertiesDF.withColumn("ArrayCol", lit(Array.ofDim[Int](nrRows,nrCols)))

сделает свое дело

...