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

如何切片直到最后一项以形成新列?

麻和雅
2023-03-14

我有一个以下格式的dataframe

+-------------------------------------------------------------------------------------------------+
|value                                                                                            |
+-------------------------------------------------------------------------------------------------+
|datalake-performance/raw/bamboohr/bamboohr_custom_turnover_data/2020/12/10/11:15.csv             |
|datalake-performance/raw/gitlab/002429d9-908c-497b-96ba-67794b31f0cd                             |
|datalake-performance/processed/bamboohr/employee/04-08-2020/16:23.csv                            |
|datalake-performance/raw/zoom/user/year=2020/month=09/day=22/a329affc-b1f5-45d1-932a-fbb13d9873d6|
+-------------------------------------------------------------------------------------------------+

我想用以下格式生成一个新列:

newcol
[bamboohr_custom_turnover_data, 2020, 12, 10]
[]
[employee, 04-08-2020]
[user, year=2020, month=09, day=22]
df['value'].str.split('/').str[3:-1]  
df = df.withColumn("list", (split(col("value"), "/")))    
df.select(slice(df["list"], 3, size(df["list"]) - (3 + 1)))

如何通过PySpark中的[3:-1]获得切片?

共有1个答案

谷梁卓
2023-03-14

您可以使用Spark SQL函数slicesize来实现切片。请注意,Spark SQL数组索引从1开始,而不是从0开始。

df2 = df.selectExpr("slice(split(value, '/'), 4, size(split(value, '/')) - 4) newcol")

df2.show(truncate=False)
+---------------------------------------------+
|newcol                                       |
+---------------------------------------------+
|[bamboohr_custom_turnover_data, 2020, 12, 10]|
|[]                                           |
|[employee, 04-08-2020]                       |
|[user, year=2020, month=09, day=22]          |
+---------------------------------------------+
 类似资料:
  • 问题内容: 提取切片的最后一个元素的Go方法是什么? 上面的解决方案有效,但看起来很尴尬。 问题答案: 仅读取切片的最后一个元素: 要删除它: 参见此页面有关切片技巧

  • 提取切片的最后一个元素的方式是什么? 上述解决方案可行,但似乎有些尴尬。

  • 问题内容: 我在做下面的运动。 创建一个包含四个元素的切片。 创建一个新切片,并将第三个和第四个元素仅复制到其中。 我已经返回了以下程序 我程序的输出是。但我希望newElements切片为[3 4]- 我的程序出了什么问题。 问题答案: 使用内置的复制功能将元素从一个切片复制到另一个切片。 在操场上跑 您可以使用append创建切片并在单个语句中复制元素,但是代码并不像使用copy那样明显。 在

  • 问题内容: 我想支持Rtl,并在最后一个片段上设置当前项目,但是当我在自己的代码中编写此代码时,我不知道如何访问最后一个片段。 根据这篇文章,我想让我成为Rtl: MainActivity.java ,我在其中定义: 最后,这是我的视图寻呼机适配器: 问题答案: 因为我用: 在设置适配器之前,它无法正常工作,在设置适配器之后,我应该编写此代码,这要归功于Kevin Chris和K Neeraj L

  • 编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码。这将有助于其他人回答这个问题。 我试图在C上创建一个单链表。我用3个函数来创建一个基于“DiseaseList”结构的项目,将该项目添加到列表中,然后打印出来。 我已经花了几个小时梳理这些代码,我似乎无法阻止它将这个列表的开头定位到最后一项。只有两点可以改变头部(其中head=*),但这肯定是对我所写内容的误解,因为我无法理解。

  • 问题内容: 我有一个带有熊猫MultiIndex的数据框: 然后,我从该DataFrame中删除一些行: 但是当我查询MutliIndex时,它仍然在两个国家都处于其水平。 我可以用一种很奇怪的方式自己解决这个问题: 但这似乎很混乱。有什么更好的方法我想念吗? 问题答案: 这是以前咬过我的东西。出于性能和哲学上的考虑,删除列或行不会更改基础MultiIndex,并且正式不将其视为Bug(在此处了解