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

使用pyspark 2.4将列分割成多列[重复]

吴宏扬
2023-03-14

我们如何使用Pyspark2.4基于“/”之类的分隔符拆分sparkDataframe列

我的专栏包含:

+-------------------+
|           timezone|
+-------------------+
|   America/New_York|
|  Africa/Casablanca|
|      Europe/Madrid|
|      Europe/Madrid|
|                   |
|   Null            |

谢谢

共有1个答案

国兴文
2023-03-14
# Creating a dataframe
values = [('America/New_York',),('Africa/Casablanca',),('Europe/Madrid',),('Europe/Madrid',),('Germany',),('',),(None,)]
df = sqlContext.createDataFrame(values,['timezone',])
df.show(truncate=False)
+-----------------+
|timezone         |
+-----------------+
|America/New_York |
|Africa/Casablanca|
|Europe/Madrid    |
|Europe/Madrid    |
|Germany          |
|                 |
|null             |
+-----------------+

from pyspark.sql.functions import instr, split
df = df.withColumn('separator_if_exists',(instr(col('timezone'),'/') > 0) & instr(col('timezone'),'/').isNotNull())
df = df.withColumn('col1',when(col('separator_if_exists') == True,split(col('timezone'),'/')[0]).otherwise(None))
df = df.withColumn('col2',when(col('separator_if_exists') == True,split(col('timezone'),'/')[1]).otherwise(None)).drop('separator_if_exists')
df.show(truncate=False)

+-----------------+-------+----------+
|timezone         |col1   |col2      |
+-----------------+-------+----------+
|America/New_York |America|New_York  |
|Africa/Casablanca|Africa |Casablanca|
|Europe/Madrid    |Europe |Madrid    |
|Europe/Madrid    |Europe |Madrid    |
|Germany          |null   |null      |
|                 |null   |null      |
|null             |null   |null      |
+-----------------+-------+----------+

文档:split()和instr()。注意instr()是基于1的索引。如果未找到要搜索的子字符串,则返回0。

 类似资料:
  • 我有一个列,其中包含该列的名称和值,格式如下: 我不想使用上面的设置,而是希望按以下格式排列列: 问题是这些值在整个列中并不一致,有时我会有这些值的组合,有时没有,有时只有一个,但顺序如何并不重要,所有这些列都必须创建。怎样才能用一种通用的方式调用它们,而不用像这样指定值:

  • 是否有可能在火花中将多个列爆炸成一个新列?我有一个如下所示的数据框: 期望输出: 到目前为止,我尝试过: 这不起作用。非常感谢您的任何建议。

  • 我有N个整数,例如3、1、4、5、2、8、7。可能有一些重复的。我想把这个序列分成连续的子序列,这样我们就可以从它们形成非递减序列。如何计算最小切割次数?对于上面提到的例子,答案是6,因为我们可以将这个序列划分为{3}、{1}、{4,5}、{2}、{7}、{8},然后形成{1,2,3,4,5,7,8}。最快的方法是什么? 有没有人知道假设某些数字可能相等时该怎么解呢?

  • 我有一个Pandas DataFrame列,其中包含一个列表中的多个列表。类似于这样: 我想将列表拆分为多列,因此输出应该是这样的: 请帮我做这件事。预先感谢

  • 问题内容: 我有一个关于将数据框列中的列表分成多行的问题。 假设我有这个数据框: 我想要数字的每个单一组合,因此最终结果将是: 因为现在我得到以下结果: 为了得到上面的结果,我做了: 问题答案: 与斯科特·波士顿(Scott Boston)的建议类似,我建议您分别展开各列,然后将它们合并在一起。 例如,对于“职位”: 并且,一起:

  • 本文向大家介绍用Python将一个列表分割成小列表的实例讲解,包括了用Python将一个列表分割成小列表的实例讲解的使用技巧和注意事项,需要的朋友参考一下 方法一 方法二 效果 以上这篇用Python将一个列表分割成小列表的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。