Pyspark dataframes:根据另一列的值提取一列

2024-01-01

我有一个包含以下列和相应值的数据框(请原谅我的格式,但不知道如何将其放入表格格式):

Src_ip     dst_ip     V1     V2     V3     top
"A"         "B"       xx     yy     zz     "V1"

现在我想添加一列,比如说top_value它获取与 V1 中的字符串对应的列的值。

Src_ip     dst_ip     V1     V2     V3     top   top_value
"A"         "B"       xx     yy     zz     "V1"     xx

所以基本上,获取与“top”列中的值相对应的值,并创建一个名为“top_value”的新列

我尝试过创建 UDF 以及使用字符串作为别名,但无法这样做。任何人都可以帮忙吗?


您可以收集V1, V2 and V3列为struct并传递给udf函数与top列并将值提取为

scala

import org.apache.spark.sql.functions._
def findValueUdf = udf((strct: Row, top: String) => strct.getAs[String](top))

df.withColumn("top_value", findValueUdf(struct("V1", "V2", "V3"), col("top")))

这应该给你

+------+------+---+---+---+---+---------+
|Src_ip|dst_ip|V1 |V2 |V3 |top|top_value|
+------+------+---+---+---+---+---------+
|A     |B     |xx |yy |zz |V1 |xx       |
+------+------+---+---+---+---+---------+

pyspark

pyspark 中的等效代码是

from pyspark.sql import functions as f
from pyspark.sql import types as t
def findValueUdf(strct, top):
    return strct[top]

FVUdf = f.udf(findValueUdf, t.StringType())

df.withColumn("top_value", FVUdf(f.struct("V1", "V2", "V3"), f.col("top")))

此外,您可以在列表中定义要使用的列名称struct函数,这样您就不必对它们进行硬编码。

我希望答案有帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pyspark dataframes:根据另一列的值提取一列 的相关文章

随机推荐

  • CKEditor只读

    自从我使用 CKEditor 以来我遇到了一个问题 http ckeditor com http ckeditor com 问题是我找不到使编辑器只读的方法 而且我不能只使用文本区域 因为我想保持一致性 我已经在 StackOwerflow
  • 制作 Flash 游戏的可下载版本的最佳方法是什么?

    我已经用 Flash 制作了一款游戏 我想为那些宁愿离线玩的人提供一个简单的下载 事实是 我使用文件夹整体结构来动态加载每个级别的内容 文件夹结构看起来像这样 但这并不重要 游戏文件夹 animations 动画1 swf 动画2 swf
  • 使用 Apache POI 从 java 中的 excel 工作表读取数据

    我需要在 java 中读取 Excel 工作表中的数据 我能够读取普通字符串 但是当我尝试读取包含日期和时间的单元格 28 5 2018 10 00 时 我只得到日期为 2018 年 5 月 28 日 这是Excel单元格 此代码读取日期
  • NReco PDFGenerator 问题

    我已经使用这个工具大约一周了 现在 今天 它停止工作了 我已将其余代码恢复到之前的状态 但仍然出现相同的错误 我从抛出的异常中得到的所有信息是 NReco PdfGenerator dll 中发生 System Exception 类型的异
  • 在 Draft.js 中获取插入符位置(行号)

    如何获得 Draft js 中的插入符号位置 我想你可以从选择状态中获取块 然后获取块数组并查看块数组位于哪个位置 但我不确定这是一种可靠的方法 甚至是最好的方法 不确定这是否是您的意思 但您可以像这样获取当前块的索引 const curr
  • 为什么从命令提示符运行 JAR 文件时出现异常?

    您好 我使用 eclipse 上的导出选项制作了一个可运行的 JAR 文件 但是 当我通过命令提示符运行文件时 我得到以下信息 Exception in thread main java lang NoSuchMethodError at
  • Golang 歧义错误重新定义

    为什么可以redefine the err多变的 err ipdf Open source if err nil panic Couldn t open pdf payload err ioutil ReadFile other if er
  • 将大量数据从 iPad 转换/上传到 Dropbox

    我正在通过 Instruments 运行我的应用程序并使用大量数据对其进行压力来完成它 仪器测试进展顺利 但压力测试是我遇到问题的地方 在不涉及太多细节的情况下 我为我的应用程序提供了越来越多的Core Data它需要推断数据 制作图表并在
  • Angular 中的加密和 C# (.NET) 中的解密

    我有 Angular 中的数据加密代码 但我不知道如何在服务器端解密它 角码 public static getEncryptedInfo dataString string let password environment encrypt
  • 如何将 system.serviceModel 放入 ServiceConfiguration.cscfg (Windows Azure)

    我有以下代码 用于微软翻译
  • 在 Surfaceview 的画布上显示位图

    我正在尝试开发一个 Android 应用程序来显示可缩放 可平移的地图 这只是一个位图图像 它还允许用户单击地图上的某些点 我正在努力寻找实现此类应用程序的最有效方法 在尝试了许多其他方法 包括 Webviews OpenLayers 之后
  • LDAP:错误代码 49 - 简单绑定失败:NT_STATUS_LOGON_FAILURE

    我正在尝试对用户进行身份验证 但它抛出Exception 可能是配置有问题 public class LdapApplication private static final String INITIAL CONTEXT FACTORY c
  • 通过布尔属性使用“track by”过滤 Angular 1.2 ng-repeat

    我试图根据布尔属性的值过滤一些列表项 但无论我做什么 整个列表都会显示 我尝试过的一些东西已经损坏 没有任何显示 但这既不在这里也不在那里 我无法让我的过滤按预期工作 scope attendees firstname Steve last
  • 如何在 Scala 中向枚举添加方法?

    在 Java 中你可以 public enum Enum ONE public String method return 1 TWO public String method return 2 THREE public String met
  • REST 如何在 URI 中传递空路径参数?

    我正在开发一个安静的网络应用程序 在此我采用的参数是 userid 和 orderid The userid can be null URI 是 Path api user userid order orderid 我的方法是 void a
  • 最好的 GWT 小部件库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何阻止 Meteor/Cordova 应用程序连接到 10.0.2.2? (为什么应用程序会连接到那里?)

    我有一个 Meteor 应用程序 它在本地服务器上运行以进行开发 http 10 0 2 10 3000 http 10 0 2 10 3000 The ROOT URL设置正确 所以 meteor runtime config ROOT
  • 检查列表中是否包含 Ansible 中的项目

    我正在尝试检查提供的版本是否是有效的受支持版本 我已在变量中设置了可接受版本的列表 如果提供的版本不在列表中 我希望任务失败 但是 我不确定如何做到这一点 role vars main yml acceptable versions 2 3
  • 比较两个分数(< 和朋友)

    我有两个我喜欢比较的分数 它们的存储方式如下 struct fraction int64 t numerator int64 t denominator 目前 我这样比较它们 bool fraction le struct fraction
  • Pyspark dataframes:根据另一列的值提取一列

    我有一个包含以下列和相应值的数据框 请原谅我的格式 但不知道如何将其放入表格格式 Src ip dst ip V1 V2 V3 top A B xx yy zz V1 现在我想添加一列 比如说top value它获取与 V1 中的字符串对应