фильтровать один из столбца DF, который является JSON - PullRequest
0 голосов
/ 02 июля 2019

У меня есть DF, как показано ниже:

|               value              |offset                     (these 2 are columns)

|{"Name":"myname","valid":"true"}  |  Guru

|{"Name":"myname1","valid","false"}|  Guru

который я хочу получить 2 DF из столбца true или false значения, как показано ниже:

|               value              |offset
|{"Name":"myname","valid":"true"}  |  Guru
|               value              |offset
|{"Name":"myname1","valid","false"}|  Guru

1 Ответ

0 голосов
/ 02 июля 2019

get_json_object() используется для работы с полями, содержащими строки JSON.Смотри https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions$@get_json_object(e:org.apache.spark.sql.Column,path:String):org.apache.spark.sql.Column

scala> val in = """value offset  partition       sourceSystem    sourceName      datePartition
     | {"Name":"myname","valid":"true"}  Guru    1       sda     sajka   ajsa
     | {"Name":"myname1","valid":"false"}        Guru    1       sda     sajka   ajsa"""
in: String =
value   offset  partition   sourceSystem    sourceName  datePartition
{"Name":"myname","valid":"true"}    Guru    1   sda sajka   ajsa
{"Name":"myname1","valid":"false"}  Guru    1   sda sajka   ajsa

scala> val df = spark.read.option("header", true).option("sep", "\t").csv(in.split("\n").toSeq.toDS)
df: org.apache.spark.sql.DataFrame = [value: string, offset: string ... 4 more fields]

scala> df.where(get_json_object('value, "$.valid") === "true").show
+--------------------+------+---------+------------+----------+-------------+
|               value|offset|partition|sourceSystem|sourceName|datePartition|
+--------------------+------+---------+------------+----------+-------------+
|{"Name":"myname",...|  Guru|        1|         sda|     sajka|         ajsa|
+--------------------+------+---------+------------+----------+-------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...