Spark Df Проверка значения столбца на основе предыдущего столбца - PullRequest
0 голосов
/ 30 декабря 2018

Привет, я застрял в реализации пользовательского условия по искровому DF.По сути, я хочу пометить столбец как 0 или 1 на основе значения Null, присутствующего в столбце, т. Е. Если любой столбец

содержит значение null, состояние, соответствующее этой строке, будет равно 0, иначе 1

 val someData = Seq(
    Row(8, "bat"),
    Row(64, "mouse"),
    Row(null, "rat")
  )

  val someSchema = List(
    StructField("number", IntegerType, true),
    StructField("word", StringType, true)
  )

  val someDF = sparkSession.createDataFrame(
    sparkSession.sparkContext.parallelize(someData),
    StructType(someSchema)
  )
val fieldList: Seq[Column] = Seq(col("word"),col("number"))


 val df = fieldList.foldLeft(inputDf)(
      (inputDf, f) => {
       dfin = inputDf.withColumn(Status, lit(0))
        dfin
          .withColumn(
            Status,
            when(f.isNotNull and col("status").isin(0), 0).otherwise(1)
          )

      }

, но проверяется на основе последнего столбца в fieldList, но должно быть похоже на

col 1  col2  status
zyx .  pqe .  0
null . zyz . 1
xdc . null  1
null  null  1

1 Ответ

0 голосов
/ 30 декабря 2018
val df = someDF.withColumn("status", when(fieldList.map(x => col(x).isNull).reduce(_ || _), 1).otherwise(0)

Идея состоит в том, чтобы сначала повернуть имя каждого столбца в столбец и проверить, является ли он нулевым (карта), теперь простое уменьшение приведет к истине, если хотя бы один равен нулю

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