У меня есть некоторые данные json, как показано ниже, мне нужно создать новые столбцы на основе некоторых значений Jason
{"start": "1234567679", "test": ["abc"], "value": 324," end ":" 1234567689 "}
{" start ":" 1234567679 "," test ": [" xyz "]," value ":" Near "," end ":"1234567689 "}
{" start ":" 1234568679 "," test ": [" pqr "]," value ": [" Attr "," "]," end ":" 1234568679 "}
{"start": "1234568997", "test": ["mno"], "value": ["{\" key \ ": \" 1 \ ", \" value \ ": [\ "789 \"]} "]," end ":" 1234568999 "}
выше - это пример json
Я хочу создать столбец, как показано ниже
start abc xyz pqr mno end
1234567679 324 null null null 1234567689
1234567889 null Near null null 1234567989
1234568679 null null attr null 1234568679
1234568997 null null null 789 1234568999
def getValue1(s1: Seq[String], v: String) = {
if (s1(0)=="abc")) v else null
}
def getValue2(s1: Seq[String], v: String) = {
if (s1(0)=="xyz")) v else null
}
val df = spark.read.json("path to json")
val tdf = df.withColumn("abc",getValue1($"test", $"value")).withColumn("xyz",getValue2($"test", $"value"))
Но это я не хочу использовать, потому что мои тестовые значения больше, я хочу, чтобы какая-то функция делала что-то вроде этого
def getColumnname(s1: Seq[String]) = {
return s1(0)
}
val tdf = df.withColumn(getColumnname($"test"),$"value"))
это хорошая идея, чтобы изменить значения на столбцы, я хочу так, потому что янеобходимо применить это к некоторому коду машинного обучения, который нуждается в простых столбцах