如何在Scala / Spark数据框中的每一行使用withColumn带条件

阿塔尔夫·塔库尔(Atharv Thakur)

我有以下格式的数据框

+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+
|DataPartition    |TimeStamp                |FFAction|!||IdentifierValue_effectiveFrom|IdentifierValue_effectiveTo|IdentifierValue_identifierEntityId|IdentifierValue_identifierEntityTypeId|IdentifierValue_identifierTypeId|
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+
|SelfSourcedPublic|2018-03-05T11:54:18+00:00|I|!|       |1900-01-01T00:00:00+00:00    |9999-12-31T00:00:00+00:00  |4295903126                        |404010                                |320150                          |
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+

我想在下面的列上添加附加列

IdentifierValue_identifierEntityTypeId

在以下情况下添加额外的列分区

如果IdentifierValue_identifierEntityTypeId = 1001371402,则分区= Repno2FundamentalSeries否则,如果IdentifierValue_identifierEntityTypeId404404,则分区= Repno2Organization

这就是我要实现的目标

 val temp = temp1.withColumn("Partition", when($"IdentifierValue_identifierEntityTypeId" === "404010", 0).otherwise("Repno2FundamentalSeries"))
    temp.show(false)

我得到低于输出,但得到零值

+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+---------+
|DataPartition    |TimeStamp                |FFAction|!||IdentifierValue_effectiveFrom|IdentifierValue_effectiveTo|IdentifierValue_identifierEntityId|IdentifierValue_identifierEntityTypeId|IdentifierValue_identifierTypeId|Partition|
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+---------+
|SelfSourcedPublic|2018-03-05T11:54:18+00:00|I|!|       |1900-01-01T00:00:00+00:00    |9999-12-31T00:00:00+00:00  |4295903126                        |404010                                |320150                          |0        |
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+---------+

我是scala的新手,所以提出了一个基本问题

对于列上的多个条件,何时以及其他情况下如何编写。这对我不起作用

线程“主”中的异常java.lang.IllegalArgumentException:else()只能在when()先前生成的列上应用一次

val dataMain = dataMain1.withColumn(
      "Partition",
      when($"RelationObjectId_relatedObjectType" === "EDInstrument" && $"RelationObjectId_relatedObjectType" === "Fundamental", "Instrument2Fundamental")
        .otherwise(when($"RelationObjectId_relatedObjectType" === "EDInstrument" && $"RelationObjectId_relatedObjectType" === "FundamentalSeries", "Instrument2FundamentalSeries"))
        .otherwise(when($"RelationObjectId_relatedObjectType" === "Organization" && $"RelationObjectId_relatedObjectType" === "Fundamental", "Organization2Fundamental"))
        .otherwise(when($"RelationObjectId_relatedObjectType" === "Organization" && $"RelationObjectId_relatedObjectType" === "FundamentalSeries", "Organization2FundamentalSeries"))
        )

根据您提供的条件,应按以下方式更改when条件。

如果IdentifierValue_identifierEntityTypeId = 1001371402,则分区= Repno2FundamentalSeries否则,如果IdentifierValue_identifierEntityTypeId404404,则分区= Repno2Organization

df1.withColumn("Partition",
  when($"IdentifierValue_identifierEntityTypeId" === "1001371402", "Repno2FundamentalSeries")
    .otherwise("Repno2Organization")
)

输出:

+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+-----------------------+
|DataPartition    |TimeStamp                |FFAction|!||IdentifierValue_effectiveFrom|IdentifierValue_effectiveTo|IdentifierValue_identifierEntityId|IdentifierValue_identifierEntityTypeId|IdentifierValue_identifierTypeId|Partition              |
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+-----------------------+
|SelfSourcedPublic|2018-03-05T11:54:18+00:00|I||!       |1900-01-01T00:00:00+00:00    |9999-12-31T00:00:00+00:00  |4295903126                        |404010                                |320150                          |Repno2FundamentalSeries|
+-----------------+-------------------------+-----------+-----------------------------+---------------------------+----------------------------------+--------------------------------------+--------------------------------+-----------------------+

编辑:

这是你写嵌套的方式 When

val dataMain = df.withColumn(
"Partition",
when(($"RelationObjectId_relatedObjectType" === "EDInstrument" && $"RelationObjectId_relatedObjectType" === "Fundamental"), "Instrument2Fundamental")
  .otherwise(
    when($"RelationObjectId_relatedObjectType" === "EDInstrument" && $"RelationObjectId_relatedObjectType" === "FundamentalSeries", "Instrument2FundamentalSeries")
      .otherwise(
        when($"RelationObjectId_relatedObjectType" === "Organization" && $"RelationObjectId_relatedObjectType" === "Fundamental", "Organization2Fundamental")
          .otherwise(when($"RelationObjectId_relatedObjectType" === "Organization" && $"RelationObjectId_relatedObjectType" === "FundamentalSeries", "Organization2FundamentalSeries")
          )
      )
  )

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Spark数据框中执行条件“ withColumn”?

如何在Python数据框中的每一行上使用split函数?

如何返回与熊猫数据框中的每一行都符合条件的列标题?

如何为每一行使用SaveChanges()

如何对查询的每一行使用单选按钮

如何在Powershell中为文件中的每一行使用正则表达式

如何删除熊猫数据框中的每一行?

如何为numpy数组中的每一行使用不同的索引?

如何在 pygame.draw.lines 中为每一行使用不同的颜色

如何在Python中为数据框的每一行创建唯一的XML

使用Python如何在Pandas数据框中的每一行的范围内生成随机数?

Tensorflow-如何在每一行使用相同的辍学面具

如何在pyspark的数据框中的每一行中查找字符串

如何在熊猫数据框中从当前行中减去前一行并将其应用于每一行;不使用循环?

如何在熊猫数据框的每一行上使用.rolling()?

如何转换在每一列的每一行中包含列表的数据框

如何获取数据框中每一行的每一列的值和类型?

在Scala中的Spark数据帧的每一行中查找最大值

如何在Scala / Spark中创建示例数据框

如何在 Scala/Spark 的数据框中扩展数组

如何减少数据框中每一行中的列表中的某些值

如何从熊猫数据框中的列中的每一行中删除重复值

如何既从数据框中随机选择行又删除已选择的每一行?

如何在spark scala中通过数据帧动态调用withColumn函数

如何优化我的查询速度(避免对每一行使用子选择)?

如何从字典中的每一行中提取文本,如数据框中的列?

如何使数据框中的每一行的每一列都有一个值?

如何在巨大数据框的每一行中查找前n个值的列索引

如何在不迭代每一行的情况下访问熊猫数据框中的值