当前位置: 首页 > 知识库问答 >
问题:

Sparkscala将列名映射为值true的输出数组类型列

郑帅
2023-03-14

如何创建列colMap的ArrayType[StringType]哪个值是数组与元素是字符串匹配的列的名称哪些值为真?

我有这样的输入DataFrame:

+-----+-----+-----+
|col1 |col2 |col3 |
+-----+-----+-----+
|true |false|true |
|false|false|false|
|false|false|true |
+-----+-----+-----+

我想创建这样的输出DataFrame:

+-----+-----+-----+------------+
|col1 |col2 |col3 |colMap      |
+-----+-----+-----+------------+
|true |false|true |[col1, col3]|
|false|false|false|[]          |
|false|false|true |[col3]      |
+-----+-----+-----+------------+

编辑:我发现了这个重复的问题:

Spark scala从多列中获取字符串类型的数组

但想知道是否有更好的方法来实现产出?

共有1个答案

孔鹤龄
2023-03-14

您可以使用内置的高阶函数过滤器,而不是使用UDF过滤数组中的值。

val df = Seq((true, false, true),
    (false, false, false),
    (false, false, true)).toDF("col1", "col2", "col3")


df.withColumn("colMap", array(df.columns.map(c=> when(col(c) === "true", c)):_*))
  .withColumn("colMap", expr("filter(colMap, c-> c is not null)"))
  .show(false)

+-----+-----+-----+------------+
|col1 |col2 |col3 |colMap      |
+-----+-----+-----+------------+
|true |false|true |[col1, col3]|
|false|false|false|[]          |
|false|false|true |[col3]      |
+-----+-----+-----+------------+
 类似资料:
  • 问题内容: 我的PostgreSQL数据库(9.2)中有一个表,其中的列类型为JSON。我很难将此列映射到“ JPA2实体”字段类型。 我尝试使用String,但是当我保存实体时,出现一个异常,即它无法将字符转换为JSON。 处理JSON列时使用的正确值类型是什么? 一个简单的解决方法是定义一个文本列。 问题答案: 请参阅PgJDBC错误#265。 PostgreSQL过于严格,对数据类型转换非常

  • 我正在编写一个映射函数,它将键生成为一些user_id,值也是文本类型。我是这样做的 然后,在主程序中,我将映射器的输出类设置为: 因此,即使我将输出值的类设置为text.class,但在编译时仍然会出现以下错误:

  • 问题内容: 输入值 我有一列类型的表格: 输出量 我想在pyspark重塑它,这样所有的按键(,,等)都列,分别为: 使用作品: 但是 我需要一个解决方案, 因为我有很多 列名称,所以没有明确提及列名称 。 架构图 问题答案: 由于的键不是架构的一部分,因此您必须首先收集这些键,例如: 当您拥有了这些之后,剩下的就是简单的选择:

  • 我有个问题。我在enter中得到了一个csv,其值如下: 该文件的名称类似于:AB01_TEST_ABDC_YYYYMMDd.csv 我需要把它们放到一张地图上,就像: Bar是csv中一行的bean,Foo是由Bar的一些元素创建的bean 现在,我成功地通过CSV的第一列值将列表拆分为一个映射。这给了: 我是这样做的: baz必须被csv的第一列和每个第一列值的行的itération拆分。因为

  • 我在使用SWIG(3.0.6版)围绕C库生成Python包装时遇到了一些问题。 我的问题与应用输出类型映射有关,特别是在类类型的指针/引用的情况下。 为了说明,这就是我想要的标准类型,它是有效的: 您不必传入“resultLong”,但它会自动附加到结果中。太棒了 但是,当输出类型是指向类类型的指针时,这似乎不像我期望的那样工作: 问题似乎是SWIG没有以与简单类型相同的方式处理它。它仍然在包装函

  • 我对Flutter编程非常陌生,我正在尝试导入一个本地JSON文件,其中包含书籍数据,如标题、作者、发布年份等。 最初我使用JSON-to-DART转换器来组装一个图书数据模型,现在我正在尝试创建一个函数,在该函数中,程序获取本地JSON文件,并使用类中的方法将数据解析为地图。 我遇到的问题是返回类型