прямая ссылка scala распространяется на определение значения - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь типизировать столбцы во фрейме данных df_trial, в котором все столбцы представлены в виде строки, на основе XML-файла, который я пытаюсь набрать, приведите каждый столбец.

val columnList = sXml \\ "COLUMNS" \ "COLUMN"
val df_trial = sqlContext.createDataFrame(rowRDD, schema_allString)
columnList.foreach(i => {
  var columnName = (i \\ "@ID").text.toLowerCase()
  var dataType = (i \\ "@DATA_TYPE").text.toLowerCase()
  if (dataType == "number") {
    print("number")
    var DATA_PRECISION: Int = (i \\ "@DATA_PRECISION").text.toLowerCase().toInt
    var DATA_SCALE: Int = (i \\ "@DATA_SCALE").text.toLowerCase().toInt;
    var decimalvalue = "decimal(" + DATA_PRECISION + "," + DATA_SCALE + ")"
    val df_intermediate: DataFrame =
      df_trial.withColumn(s"$columnName",
                          col(s"$columnName").cast(s"$decimalvalue"))
    val df_trial: DataFrame = df_intermediate
  } else if (dataType == "varchar2") {
    print("varchar")
    var DATA_LENGTH = (i \\ "@DATA_LENGTH").text.toLowerCase().toInt;
    var varcharvalue = "varchar(" + DATA_LENGTH + ")"
    val df_intermediate =
      df_trial.withColumn(s"$columnName",
                          col(s"$columnName").cast(s"$varcharvalue"))
    val df_trial: DataFrame = df_intermediate
  } else if (dataType == "timestamp") {
    print("time")
    val df_intermediate =
      df_trial.withColumn(s"$columnName", col(s"$columnName").cast("timestamp"))
    val df_trial: DataFrame = df_intermediate
  }
});

1 Ответ

0 голосов
/ 12 ноября 2018

В каждой ветви if-else вы используете значения с именем df_trial до того, как определили их. Сначала вам нужно изменить код, чтобы определить их.

Примечание: как вы понимаете, df_trial в самом верху не используется. В зависимости от того, что вы пытаетесь сделать, вы можете изменить первый df_trial на var и удалить val из других случаев. (Это, вероятно, все еще неправильно, так как вы будете перезаписывать одну и ту же переменную несколько раз, пока будете повторять цикл columnList).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...