Фильтровать столбец по нескольким условиям: Scala Spark - PullRequest
0 голосов
/ 09 мая 2018

У меня возникли проблемы при попытке отфильтровать строки в столбце на основе нескольких условий. По сути, я храню свои множественные условия в массиве и хочу отфильтровать их все. Тем не менее, я получаю ошибку в конце. Кто-нибудь может предложить способ решить эту проблему? Вот пример кода того, чего я пытаюсь достичь:

    // Now let's filter through the ADM1 codes to select all 50 US States
val stateArray = Array("USAL", "USMD", "USCA", "USME", "USND", "USSD", "USWY", "USAK", "USWA", "USFL",
  "USGA", "USSC", "USNC", "USMA", "USNH", "USVT", "USAR", "USAZ", "USTX", "USLA", "USIL", "USOR", "USNV",
  "USID", "USMN", "USNM", "USNE", "USNJ", "USDE", "USVA", "USWV", "USTN", "USKY", "USNY", "USPA", "USIN",
  "USOH", "USHI", "USOK", "USIA", "USMI", "USMS", "USMO", "USCO", "USKS", "USUT", "USWI", "USMT", "USRI",
  "USCT")

// Let's filter through all of these conditions
val tmpDf3 = tmpDf1.filter(tmpDf("Actor1Geo_ADM1Code") === stateArray)

// I can do this with a for loop, but I want everything in one data frame
    for(n <- stateArray) {
  val tmpDf2 = tmpDf1
    .filter(tmpDf1("Actor1Geo_ADM1Code") === n)
  tmpDf2.show(false)
  tmpDf2.printSchema()
}

1 Ответ

0 голосов
/ 09 мая 2018

Использование isin:

tmpDf1.filter(tmpDf("Actor1Geo_ADM1Code").isin(stateArray: _*))

Пример

val states = Array("USAL", "USMD")
// states: Array[String] = Array(USAL, USMD)

val df = Seq((1, "USAL"), (2, "USMD"), (3, "USGA")).toDF("id", "Actor1Geo_ADM1Code")
// df: org.apache.spark.sql.DataFrame = [id: int, Actor1Geo_ADM1Code: string]

df.show
+---+------------------+
| id|Actor1Geo_ADM1Code|
+---+------------------+
|  1|              USAL|
|  2|              USMD|
|  3|              USGA|
+---+------------------+


df.filter(df("Actor1Geo_ADM1Code").isin(states: _*)).show
+---+------------------+
| id|Actor1Geo_ADM1Code|
+---+------------------+
|  1|              USAL|
|  2|              USMD|
+---+------------------+
...