Есть ли способ получить доступ к dataframe вне блока if? - PullRequest
0 голосов
/ 30 марта 2020

Я использую spark- sql -2.4.1v, с java8. Я должен проверить какое-то условие в блоке if, если условие выполнено, тогда мне нужно добавить другое поле в dataframe ... и мне нужно получить доступ к этому полю вне блока if, как обработать этот сценарий.

val df = spark.createDataFrame(
    [
        ("Jose", "BLUE"),
        ("lI", "BrOwN")
    ],
    ["name", "eye_color"]
)

val colorLst = Seq("BLUE")

if(df.col("eye_color").isin(colorLst ){
    val new_df = df.filter(df.col("eye_color").isin(colorLst ))
}

//here how can I access new_df i.e. outside of condition

Является ли хорошей практикой возвращать существующий df? т.е. df = df.filter (df.col ("eye_color"). isin (colorLst))

Какова отраслевая практика ??

Ответы [ 2 ]

1 голос
/ 30 марта 2020

является ли строка if(df.col("eye_color").isin(colorLst ) компиляцией для вас?

код выше не должен компилироваться как df.col("eye_color").isin(colorLst ) return Column и, если требуется логическое значение.

Вы можете попробовать следующим образом: Сначала применить отфильтруйте и получите кадр данных filterd. val new_df = df.filter(df.col("eye_color").isin(colorLst:_*))

Теперь вы можете использовать, если условие, как показано ниже

val df1 = if(new_df.takeAsList(1).size == 0) df else new_df

Надеюсь, это поможет.

1 голос
/ 30 марта 2020

Вы можете создать пустую переменную DataFrame перед началом блока if и присвоить ей значение new_df. Это отраслевой стандарт в этих случаях.

С другой стороны, в вашем случае я не чувствую необходимости использовать условие if. Вы можете сразу присвоить new_df значение val new_df = df.filter(df.col("eye_color").isin(colorLst )), а затем использовать условие if на new_df, если необходимо.

...