gpt4 book ai didi

scala - 如何处理 Spark 数据​​帧中的数组

转载 作者:行者123 更新时间:2023-12-04 18:58:38 26 4
gpt4 key购买 nike

我有一个 json 数据集,它的格式为:

val data = spark.read.json("user.json").select("user_id","friends").show()
+--------------------+--------------------+
| user_id| friends|
+--------------------+--------------------+
|18kPq7GPye-YQ3LyK...|[rpOyqD_893cqmDAt...|
|rpOyqD_893cqmDAtJ...|[18kPq7GPye-YQ3Ly...|
|4U9kSBLuBDU391x6b...|[18kPq7GPye-YQ3Ly...|
|fHtTaujcyKvXglE33...|[18kPq7GPye-YQ3Ly...|
+--------------------+--------------------+
data: org.apache.spark.sql.DataFrame = [user_id: string, friends: array<string>]
如何将其转换为 [user_id: String,friend: String],例如:
+--------------------+--------------------+
| user_id| friend|
+--------------------+--------------------+
|18kPq7GPye-YQ3LyK...| rpOyqD_893cqmDAt...|
|18kPq7GPye-YQ3LyK...| 18kPq7GPye-YQ3Ly...|
|4U9kSBLuBDU391x6b...| 18kPq7GPye-YQ3Ly...|
|fHtTaujcyKvXglE33...| 18kPq7GPye-YQ3Ly...|
+--------------------+--------------------+
我怎样才能得到这个数据框?

最佳答案

您可以使用 concat_ws连接字符串数组并仅获取字符串的函数

data.withColumn("friends", concat_ws("",col("friends")))

concat_ws(java.lang.String sep, Column... exprs) Concatenates multiple input string columns together into a single string column, using the given separator.



或者您可以使用简单的 udf 将数组转换为字符串,如下所示
 import org.apache.spark.sql.functions._

val value = udf((arr: Seq[String]) => arr.mkString(" "))

val newDf = data.withColumn("hobbies", value($"friends"))

如果你想为用户获取数组的值,那么你可以使用 explode方法如
data.withColumn("friends", explode($"friends"))

explode(Column e) Creates a new row for each element in the given array or map column.



如果您只想获取一个数据,那么正如@ramesh 建议的那样,您可以获得第一个元素
data.withColumn("friends", $"friends"(0))

希望这可以帮助!

关于scala - 如何处理 Spark 数据​​帧中的数组<String>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44906450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com