将数据框列和外部列表传递给 withColumn 下的 udf

2023-12-01

我有一个具有以下结构的 Spark 数据框。 bodyText_token 具有标记(已处理/单词集)。我有一个定义关键字的嵌套列表

root
 |-- id: string (nullable = true)
 |-- body: string (nullable = true)
 |-- bodyText_token: array (nullable = true)

keyword_list=[['union','workers','strike','pay','rally','free','immigration',],
['farmer','plants','fruits','workers'],['outside','field','party','clothes','fashions']]

我需要检查每个关键字列表下有多少标记,并将结果添加为现有数据框的新列。 例如:如果tokens =["become", "farmer","rally","workers","student"]结果将是->[1,2,0]

以下功能按预期工作。

def label_maker_topic(tokens,topic_words):
    twt_list = []
    for i in range(0, len(topic_words)):
        count = 0
        #print(topic_words[i])
        for tkn in tokens:
            if tkn in topic_words[i]:
                count += 1
        twt_list.append(count)
    
    return twt_list

我在下面使用了udfwithColumn访问该函数,但出现错误。我认为这是关于将外部列表传递给 udf。有没有办法可以将外部列表和数据框列传递给 udf 并向我的数据框添加新列?

topicWord = udf(label_maker_topic,StringType())
myDF=myDF.withColumn("topic_word_count",topicWord(myDF.bodyText_token,keyword_list))

最干净的解决方案是使用闭包传递附加参数:

def make_topic_word(topic_words):
     return udf(lambda c: label_maker_topic(c, topic_words))

df = sc.parallelize([(["union"], )]).toDF(["tokens"])

(df.withColumn("topics", make_topic_word(keyword_list)(col("tokens")))
    .show())

这不需要任何更改keyword_list或用 UDF 包装的函数。您还可以使用此方法传递任意对象。例如,这可以用于传递列表sets以实现高效查找。

如果您想使用当前的 UDF 并通过topic_words直接你必须首先将其转换为列文字:

from pyspark.sql.functions import array, lit

ks_lit = array(*[array(*[lit(k) for k in ks]) for ks in keyword_list])
df.withColumn("ad", topicWord(col("tokens"), ks_lit)).show()

根据您的数据和要求,可以选择更有效的替代解决方案,这些解决方案不需要 UDF(分解 + 聚合 + 折叠)或查找(散列 + 向量运算)。

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

将数据框列和外部列表传递给 withColumn 下的 udf 的相关文章

  • 为什么 Spark 退出并显示 exitCode: 16?

    我将 Spark 2 0 0 与 Hadoop 2 7 一起使用 并使用纱线集群模式 每次 我都会收到以下错误 17 01 04 11 18 04 INFO spark SparkContext Successfully stopped S
  • 从正在运行的 python 脚本检测优化标志是否为 -O 或 -OO

    有时我想生成一个子进程 其优化标志与启动父进程时使用的优 化标志相同 我可以使用类似的东西 optimize not debug 但这样我就可以匹配两者 O and OO flags 是否有一些 python 内部状态包含该信息 经过一番深
  • 从字符串到类型的词法转换

    最近 我尝试用Python存储和读取文件中的信息 遇到了一个小问题 我想从文本文件中读取类型信息 从 string 到 int 或 float 的类型转换非常有效 但从 string 到 type 的类型转换似乎是另一个问题 当然 我尝试了
  • 如何使用Python将WebP图像转换为Gif?

    我已经尝试过这个 from PIL import Image im Image open this webp im save that gif gif save all True 这给了我这个错误 类型错误 不支持的操作数类型 tuple
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • Paramiko - 使用私钥连接 - 不是有效的 OPENSSH 私钥/公钥文件

    我正在尝试找到解决方案 但无法理解我做错了什么 在我的 Linux 服务器上 我运行了以下命令 ssh keygen t rsa 这产生了一个id rsa and id rsa pub file 然后我将它们复制到本地并尝试运行以下代码 s
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 如果字段值在外部列表中,Django 会注释布尔值

    想象一下我有这个 Django 模型 class Letter models Model name models CharField max length 1 unique True 还有这个列表 vowels a e i o u 我想查询
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • 具有多个元素的数组的真值是二义性错误吗? Python

    from numpy import from pylab import from math import def TentMap a x if x gt 0 and x lt 0 5 return 2 a x elif x gt 0 5 a
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 如何有效地从 loadmat 函数生成的嵌套 numpy 数组中提取值?

    python中是否有更有效的方法从嵌套的python列表中提取数据 例如A array array 12000000 dtype object 我一直在使用A 0 0 0 0 当你有很多像 A 这样的数据时 这似乎不是一个有效的方法 我也用
  • Airflow Python 单元测试?

    我想为我们的 DAG 添加一些单元测试 但找不到任何单元测试 有 DAG 单元测试框架吗 有一个端到端的测试框架存在 但我猜它已经死了 https issues apache org jira browse AIRFLOW 79 https
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • 全局变量是 None 而不是实例 - Python

    我正在处理Python 中的全局变量 代码应该可以正常工作 但是有一个问题 我必须使用全局变量作为类的实例Back 当我运行应用程序时 它说 back is None 这应该不是真的 因为第二行setup 功能 back Back Back
  • 在 Python 模块中使用 InstaLoader

    我正在尝试使用 Instaloader 下载与主题标签相关的照片以进行图像分析 我在GitHub存储库中找到了一个全面的方法 如何在终端中执行它 但是 我需要将脚本集成到Python笔记本中 这是脚本 instaloader no vide
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐

  • Linux 中有标准的退出状态代码吗?

    在 Linux 中 如果进程的退出状态为 0 则认为该进程已正确完成 我发现分段错误通常会导致退出状态为 11 尽管我不知道这只是我工作的约定 像这样失败的应用程序都是内部的 还是标准 Linux 中的进程有标准退出代码吗 第 1 部分 高
  • ASP.Net / MySQL:将内容翻译成多种语言

    我有一个 ASP Net 网站 它使用 MySQL 数据库作为后端 该网站是一个英语电子商务系统 我们正在考虑将其翻译成大约五种其他语言 法语 西班牙语等 的可能性 我们将让人工翻译人员来执行翻译 我们已经研究过自动化服务 但这些还不够好
  • Azure 使用文件共享从 IIS VM 共享照片?

    如何创建可在 VM 中运行的 Web 服务器之间共享的文件共享 以直接访问 Azure 中的 Blob 存储 我正在将用 net 1 1 编写的现有 n 层网站应用程序迁移到 Azure 虚拟机 这是一个遗留应用程序 我想将其以当前形式移动
  • MPMoviePlayerController 处于纵向模式?

    我想知道是否可以在纵向模式下使用 MoviePlayer 感谢您的帮助 T 如果你使用 moviePlayer setOrientation UIDeviceOrientationPortrait animated NO API 您的应用程
  • 如何暂停 Windows 关闭

    我需要在启动和关闭时将声卡静音 取消静音 我找到了一些代码来完成这项工作 但 Windows 通常会突然关闭 并且声音永远不会静音 有人可以告诉我如何暂停关闭足够长的时间以使我的应用程序静音吗 我可以使用一个简单的 TTimer 来暂停应用
  • 在 SQL Server Management Studio 中生成脚本

    如果我有一个包含 SQL Server 数据库中数据的表 我如何生成一个脚本来创建该表并添加数据 如果我右键单击表格然后选择Script Table As gt Create to gt File 它生成一个脚本来仅创建没有数据的表 我需要
  • php pdo多数组插入

    我已经玩了几个小时并试图解决这个问题 但看起来很难解决 我能够进行单个数组插入 person array name gt Wendy age gt 32 但如果我想要多个这样的 person array array name gt Dan
  • GCE + K8S - 访问推荐IP地址

    通过 Google Container Engine 上的标准 Kubernetes 部署 要包含使用 Kubernetes 负载均衡器设置配置的服务来创建网络负载均衡器 是否可以在应用程序中访问用户 或引用 的 IP 地址 对于 PHP
  • 将 utf8 字符串拆分为字符数组

    我正在尝试拆分utf8将字符串编码为字符数组 我现在使用的功能曾经可以工作 但由于某种原因它不再工作了 可能是什么原因 更好的是 我该如何解决它 这是我的字符串 Zelf heb ik maar n vraag wie ben jij 这是
  • 不允许用户保存 TFS 凭据

    这是这个问题的后续问题 加载 Visual Studio 时 如何更改用于连接到 Visual Studio Online TFSPreview 的默认凭据 我遇到的问题是 如果用户选中了 记住我的凭据 框 我需要按照我链接的问题中给出的答
  • 向 UIView 添加宽度边框,显示外面的小背景

    我正在尝试添加圆形边框UIView以绿色背景 我创建了简单的UIView具有 borderWidth cornerRadius 和 borderColor 属性的子类 我从故事板中设置它 IBDesignable class Rounded
  • 从现有集合中初始化对象初始值设定项中的仅获取集合

    我有一个具有仅获取集合属性的类 我想使用现有集合中的值来初始化集合 我知道可以初始化集合使用集合初始值设定项 我还可以创建该对象然后使用AddRange在集合上添加现有集合的项目 然而 这将创建具有空列表的对象 然后添加现有项目 有没有办法
  • 在 Shell 中重命名逆序编号的文件

    我正在寻找一种实用的方法来在 shell 中进行此练习 我有这些文件 1 txt 2 txt 3 txt 4 txt 5 txt 50 txt 我想这样重命名 50 txt 1 txt 49 txt 2 txt 48 txt 3 txt 以
  • MySQL计算N行的移动平均值

    我正在尝试计算移动平均值ofN 行 for单个查询中的所有行 在示例中 我尝试计算 50 行的移动平均值 SELECT h1 date h1 security id SELECT AVG last50 close FROM SELECT h
  • jsdom.env 不是将 svg 导出到图像的函数

    我正在尝试根据以下教程将 d3 svg 图像转换为图像 https github com hugolpz svgcreator node js 我安装以下语句 sudo npm install g jsdom d3js npm instal
  • 如何在我的 Netbeans 项目中包含外部 jar

    当我运行 清理并构建 时 jar正在创建的文件仅在以下情况下运行lib文件夹与 jar file 因此 如果我将 jar 文件移动到桌面并保留lib文件夹中的dist文件夹中 jar 文件会给我一个例外 我该如何处理这个问题 我通过仅创建一
  • docker run 命令出现“Exec 格式错误”

    我有这个基于 Golang 的 Dockerfile FROM golang latest RUN mkdir p app WORKDIR app COPY bin huru CMD huru 我检查了一下 huru 二进制文件位于工作目录
  • X11 - 图形渲染改进

    我目前正在将无符号整数数组渲染到窗口上的二维图像 但是 对于我想要用它完成的任务来说 它太慢了 这是我的代码 int x 0 int y 0 GC gc XGCValues gcv gc XCreateGC display drawable
  • 我们怎样才能让 Watir-Webdriver 处理 IE 无效证书屏幕?

    我们在测试时可能都见过这个屏幕 您所需要的只是一个带有自签名证书的 HTTPS 站点 然后您会看到 此网站的安全证书有问题 屏幕 这需要您单击链接才能继续 对于 Watir 这不是问题 我可以像处理任何其他网页一样自动化屏幕 根据其文本或
  • 将数据框列和外部列表传递给 withColumn 下的 udf

    我有一个具有以下结构的 Spark 数据框 bodyText token 具有标记 已处理 单词集 我有一个定义关键字的嵌套列表 root id string nullable true body string nullable true