Apache spark 尝试在groupBy之后映射值时,不能将null用作映射键
我在这里试图实现的是按数据帧中的所有元素分组,然后将它们的所有多个值聚合到一个列中,该列将包含一个Apache spark 尝试在groupBy之后映射值时,不能将null用作映射键,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我在这里试图实现的是按数据帧中的所有元素分组,然后将它们的所有多个值聚合到一个列中,该列将包含一个值列表(map()) val sampleDF = baseDF .groupBy( Yyyy, MmDd, SampleField) .agg( functions.collect_list( functions.map( Selectors.selectColumn(Name), Selectors.select
值列表(map())
val sampleDF = baseDF
.groupBy(
Yyyy,
MmDd,
SampleField)
.agg(
functions.collect_list(
functions.map(
Selectors.selectColumn(Name),
Selectors.selectColumn(Surname)
)
)
)
但是,当尝试执行该代码时,会显示以下错误
java.lang.RuntimeException:不能将null用作映射键!
为什么一个值是否为null很重要?它怎么会假装用它当钥匙呢
我想得到的一个简单例子是
20190101,“样本场”,列表(地图(名称->样本,姓氏->样本),地图(名称->样本2,姓氏->样本2))
我的理解是,它将列名作为键(永远不会为空),然后不管发生什么情况都应用该值。根据
map
的文档:
创建一个新的映射列。输入列必须分组为
键值对,例如(键1、值1、键2、值2等)。钥匙
所有列必须具有相同的数据类型,并且不能为null。价值
所有列必须具有相同的数据类型
因此,请将代码更改为:
val sampleDF = baseDF
.groupBy(
Yyyy,
MmDd,
SampleField)
.agg(
functions.collect_list(
functions.map(
lit("Name"),
$"Name",
lit("Surname"),
$"Surname"
)
)
)
根据
地图的文档
:
创建一个新的映射列。输入列必须分组为
键值对,例如(键1、值1、键2、值2等)。钥匙
所有列必须具有相同的数据类型,并且不能为null。价值
所有列必须具有相同的数据类型
因此,请将代码更改为:
val sampleDF = baseDF
.groupBy(
Yyyy,
MmDd,
SampleField)
.agg(
functions.collect_list(
functions.map(
lit("Name"),
$"Name",
lit("Surname"),
$"Surname"
)
)
)