我有兴趣在我的数据框中加入一个叫做mapCol列的列
+-------------------+
| mapColumn |
+-------------------+
| Map(KEY -> VALUE) |
+-------------------+
创建一个stringColumn,它只是Map列的键和值,其中的值是“key,value”:
+-------------------+
| stringColumn |
+-------------------+
| KEY,VALUE |
+-------------------
我尝试创建一个UDF来传递这个值,如下所示:
var getStringColumn = udf(mapToString _)
df.withColumn("stringColumn,
when(col(mapColumn).isNotNull,
getStringColumn(col(mapColumn)))
.otherwise(lit(null: String)))
def mapToString(row: Row): String = {
if (null == row || row.isNullAt(FirstItemIndex)) {
return null
}
return row.getValuesMap[Any](row.schema.fieldNames).mkString(",")
}
我不断发现以下错误:
无法执行用户定义的函数($anonfun$1:(映射)=
没有必要设立UDF。一种方法是将
映射
列分解成扁平的键
val df = Seq(
(10, Map((1, "a"), (2, "b"))),
(20, Map((3, "c")))
).toDF("id", "map")
df.
select($"id", explode($"map")).
withColumn("kv_string", concat($"key".cast("string"), lit(","), $"value")).
show
// +---+---+-----+---------+
// | id|key|value|kv_string|
// +---+---+-----+---------+
// | 10| 1| a| 1,a|
// | 10| 2| b| 2,b|
// | 20| 3| c| 3,c|
// +---+---+-----+---------+
例如,使用mtcars,我想创建一个新列,这样当carb=4时,
Spark SQL中有两列,每列中的每个条目都是字符串数组。 我想合并每行中的数组,使一个新的列中的单个数组,我的代码如下: 我可以成功地在两个数组上使用函数。但是当我运行上述代码时,我得到以下异常: 组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段16.0中的任务0失败1次,最近的失败:阶段16.0中的任务0.0丢失(TID 12,localhost):org。阿帕奇。
输入: 预期输出(顺序不重要):
问题内容: 如何将列表中的字符串转换为正确的列表? 我对此感到厌倦,但并非我所期望的: 我想要这样: 谢谢 问题答案: 使用literal_eval从AST模块: 与不同,literal_eval可安全地用于用户字符串或其他未知字符串源。它只会将字符串编译成基本的python数据结构-其他所有方法都会失败。 或者,如果您的字符串就是这样(即,没有嵌入的逗号或在带引号的字符串内解析的意思),则可以强
我将用于sha256实现,如下所示。