pyspark 在没有 pandas 的情况下将一列拆分为多列

2023-11-23

我的问题是如何将一列拆分为多列。 我不知道为什么df.toPandas()不起作用。

例如,我想将“df_test”更改为“df_test2”。 我看到很多使用 pandas 模块的例子。还有别的办法吗? 先感谢您。

df_test = sqlContext.createDataFrame([
(1, '14-Jul-15'),
(2, '14-Jun-15'),
(3, '11-Oct-15'),
], ('id', 'date'))

df_test2

id     day    month    year
1       14     Jul      15
2       14     Jun      15
1       11     Oct      15

火花 >= 2.2

你可以跳过unix_timestamp并投射和使用to_date or to_timestamp:

from pyspark.sql.functions import to_date, to_timestamp

df_test.withColumn("date", to_date("date", "dd-MMM-yy")).show()
## +---+----------+
## | id|      date|
## +---+----------+
## |  1|2015-07-14|
## |  2|2015-06-14|
## |  3|2015-10-11|
## +---+----------+


df_test.withColumn("date", to_timestamp("date", "dd-MMM-yy")).show()
## +---+-------------------+
## | id|               date|
## +---+-------------------+
## |  1|2015-07-14 00:00:00|
## |  2|2015-06-14 00:00:00|
## |  3|2015-10-11 00:00:00|
## +---+-------------------+

然后应用如下所示的其他日期时间函数。

火花

不可能在一次访问中派生多个顶级列。您可以将结构或集合类型与 UDF 一起使用,如下所示:

from pyspark.sql.types import StringType, StructType, StructField
from pyspark.sql import Row
from pyspark.sql.functions import udf, col

schema = StructType([
  StructField("day", StringType(), True),
  StructField("month", StringType(), True),
  StructField("year", StringType(), True)
])

def split_date_(s):
    try:
        d, m, y = s.split("-")
        return d, m, y
    except:
        return None

split_date = udf(split_date_, schema)

transformed = df_test.withColumn("date", split_date(col("date")))
transformed.printSchema()

## root
##  |-- id: long (nullable = true)
##  |-- date: struct (nullable = true)
##  |    |-- day: string (nullable = true)
##  |    |-- month: string (nullable = true)
##  |    |-- year: string (nullable = true)

但 PySpark 中它不仅相当冗长,而且价格昂贵。

对于基于日期的转换,您可以简单地使用内置函数:

from pyspark.sql.functions import unix_timestamp, dayofmonth, year, date_format

transformed = (df_test
    .withColumn("ts",
        unix_timestamp(col("date"), "dd-MMM-yy").cast("timestamp"))
    .withColumn("day", dayofmonth(col("ts")).cast("string"))
    .withColumn("month", date_format(col("ts"), "MMM"))
    .withColumn("year", year(col("ts")).cast("string"))
    .drop("ts"))

同样你可以使用regexp_extract分割日期字符串。

也可以看看从 Spark DataFrame 中的单个列派生多个列

Note:

如果您使用未打补丁的版本SPARK-11724这将需要之后更正unix_timestamp(...)和之前cast("timestamp").

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

pyspark 在没有 pandas 的情况下将一列拆分为多列 的相关文章

  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • 如何将 self 传递给装饰器?

    我该如何通过self key下面进入装饰器 class CacheMix object def init self args kwargs super CacheMix self init args kwargs key func Cons
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Python Pandas 根据另一列的总计从另一个数据帧中选择值

    我下面有一个 DataFrame 但我需要根据取消和订单列从每个代码中选择行 假设代码 xxx 的阶数为 6 1 5 1 阶数为 11 我需要一种算法 可以选择满足总共 11 行的行 阶数为 6 5 如果没有行匹配 则选择最接近的 id 并
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • 使用 scipy curve_fit 拟合噪声指数的建议?

    我正在尝试拟合通常按以下方式建模的数据 def fit eq x a b c d e return a 1 np exp x b c np exp x d e x np arange 0 100 0 001 y fit eq x 1 1 1
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 使用 PySpark 从 azure blob 存储读取 csv 文件

    我正在尝试使用 Microsoft Azure 上的 PySpark HDInsight 集群来做一个机器学习项目 要在我的集群上进行操作 请使用 Jupyter 笔记本 另外 我的数据 一个 csv 文件 存储在 Azure Blob 存
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • Pandas style.bar 颜色基于条件?

    如何渲染其中一列的 Pandas dfstyle bar color属性是根据某些条件计算的 Example df style bar subset before after color ff781c vmin 0 0 vmax 1 0 而
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows
  • 如何循环遍历字典列表并打印特定键的值?

    我是 Python 新手 有一个问题 我知道这是一个非常简单的问题 运行Python 3 4 我有一个需要迭代并提取特定信息的列表 以下是列表 称为部分 的示例 已截断 数千个项目 state DEAD id phwl type name
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010
  • 使用 urllib 编码时保持 url 参数有序

    我正在尝试用 python 模拟 get 请求 我有一个参数字典 并使用 urllib urlencode 对它们进行 urlencode 我注意到虽然字典的形式是 k1 v1 k2 v2 k3 v3 urlencoding 后参数的顺序切
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • 是否可以对SVN中存储的内容进行加密?

    如果我将源代码存储在共享托管公司的 SVN 中 是否可以对内容进行加密 这样即使有人有权访问该存储库 他们也无法在普通视图中看到源代码 有这个插件吗 否则我想自己实现这个会很疯狂 这里的正确答案是 找到您信任的托管提供商 如果存在监管问题
  • Xcode - 如何制作弹出菜单[重复]

    这个问题在这里已经有答案了 我想在 Xcode 中制作一个弹出菜单 我该怎么做 我希望它看起来漂亮又专业 以下是使用 UIActionSheet 在 UITextView 中显示弹出菜单以响应长按附件的示例 void attachmentA
  • tmPlot 在命名空间中,但未找到其依赖项

    我有一个使用的包tmPlot函数来自treemap 但是当我尝试使用该函数时 它会抛出一个错误 表明其依赖项之一未加载 Error in tmPlot data index index vSize vSize could not find
  • 将文件复制到网络共享驱动器上

    我有一个网络共享驱动器 serveur folder 我想在其中复制文件 我可以使用特定用户 用户 通行证 在驱动器上写入内容 如何使用 C 访问具有写入权限的共享驱动器 未经测试的代码 但它将类似于 AppDomain CurrentDo
  • 显式复制构造函数或按值隐式参数

    我最近读到 不幸的是忘记了在哪里 编写operator 的最佳方式是这样的 foo operator foo other swap this other return this 而不是这个 foo operator const foo ot
  • 如何在不创建android项目的情况下设置libgdx的assets文件夹?

    有办法做吗 我在谷歌上找不到任何相关的教程 Libgdx 不会强制执行任何特定的层次结构或文件夹命名约定来保存您的资产 以便Gdx files internal myassets libgdx png 在桌面上运行得很好 但是 Androi
  • 如何使用 clang++/libc++ 编译/链接 Boost?

    这个问题的答案为什么不能在 c 0x 模式下用 libc 来 clang 链接这个 boost program options 示例 指出 您需要使用 clang stdlib libc 重建 boost 我正在使用 MacOS Lion
  • 如何在 SwiftUI 中将呈现视图关闭到选项卡视图的根视图?

    我在用着TabView在我的主页上 假设我有 4 个选项卡 在第二个选项卡上 我可以使用转到另一个视图NavigationLink我使用另外两个视图NavigationLink 然后在最新的视图上 有一个按钮可以呈现视图 我使用 fullS
  • 找不到方法 apt()

    我正在尝试使用 Dagger2 我正在使用 Android studio 2 2 2 但我的 gradle 出现错误 Error 34 0 Could not find method apt for arguments com google
  • Tomcat 停止响应 Apache

    我正在尝试解决有关使用 mod proxy ajp 连接 Apache 和 Tomcat 的问题 就我而言 Tomcat 停止响应 Apache 并且 apache 日志打印如下日志错误消息 Mon May 06 15 22 47 2013
  • 如何声明两个类,使得 A 具有 B 的成员并且 B 将 A 的成员标记为朋友?

    我正在尝试做 C Primer 第 5 版中的练习 7 32 该练习要求以下内容 定义您自己的版本Screen and Window mgr其中clear是的成员Window mgr和一个朋友Screen 以下是以下的定义Screen Wi
  • Visual Studio 2015 没有语法突出显示剃刀或 Intellisense

    我在 VS2015 RC 中的 Razor 视图没有显示 C 代码的正确颜色 我的项目在 VS2013 中运行良好 但在 2015 年则不然 并且它没有为我提供有关 C 代码的任何智能感知 解决方案已构建并且站点运行良好 我尝试了以下方法但
  • 将数组列表从一个活动传递到另一个活动

    我怎样才能通过ArrayList从一项活动转到另一项活动 这取决于数组列表的类型 putIntegerArrayListExtra String name ArrayList
  • @Immediate 注解在 Jersey2 中的使用

    我有一个与这里提出的问题类似的问题 如何让我的 Jersey 2 端点在启动时立即初始化 但稍微往下走一点 我可以立即加载我的资源 但是当我尝试通过调用 REST url 来使用它时 我得到以下堆栈跟踪 java lang IllegalS
  • Nextjs动态路由渲染两次

    我有一条动态路线pages user id jsx my id jsx包含console log useRouter query id 如果我去url user 5当我检查控制台时 一旦我得到未定义的值 然后得到正确的 ID 在本例中为 5
  • 多Mapper创建对象层次结构

    我已经玩了一段时间了 因为它看起来很像记录的帖子 用户示例 但它略有不同 对我不起作用 假设以下简化设置 一个联系人有多个电话号码 public class Contact public int ContactID get set publ
  • 为什么android模拟器相机会意外停止?

    我使用的是 Android 2 2 API 级别 8 相机已在清单中启用 当我尝试模拟器模型提供的相机图标时 它运行了几秒钟 显示一个灰色框在黑白棋盘周围移动 然后终止并显示错误消息 对不起 应用程序相机 进程 com android ca
  • 无法保存图像干预图像。 Image.php 第 138 行中的 NotWritableException

    我正在尝试保存经过处理的图像 并将其推送到 s3 我的代码有效此代码将图像直接保存在公共文件夹中 public function store Filesystem filesystem request Input all validator
  • 实体框架代码优先 - 预加载未按预期工作?

    我有以下实体框架 POCO 类 public class Customer public int Id get set public string Name get set public virtual ICollection
  • pyspark 在没有 pandas 的情况下将一列拆分为多列

    我的问题是如何将一列拆分为多列 我不知道为什么df toPandas 不起作用 例如 我想将 df test 更改为 df test2 我看到很多使用 pandas 模块的例子 还有别的办法吗 先感谢您 df test sqlContext