- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Pyspark 中实现自定义爆炸。我有 4 列,它们是具有几乎相同架构的结构数组(一列结构包含的字段比其他三列少一个)。
对于我的 DataFrame 中的每一行,我有 4 列是结构数组。列是学生、助教、教师、管理员。
students、teaching_assistants 和 teachers 是具有字段 id
、student_level
和 name
的结构数组。
例如,这是 DataFrame 中的示例行。
students、teaching_assistants 和 teachers 结构都具有相同的模式(“id”、“student_level”、“name”),而 administrators 结构具有“id”和“name”字段但缺少学生级别。
我想执行自定义展开,以便在每一行中为每个学生、助教、教授和管理员提供一个条目以及原始列名称,以防我必须按“人员类型”进行搜索。所以对于上面一行的屏幕截图,输出将是 8 行:
+-----------+---------------------+----+---------------+----------+
| School_id | type | id | student_level | name |
+-----------+---------------------+----+---------------+----------+
| 1999 | students | 1 | 0 | Brian |
| 1999 | students | 9 | 2 | Max |
| 1999 | teaching_assistants | 19 | 0 | Xander |
| 1999 | teachers | 21 | 0 | Charlene |
| 1999 | teachers | 12 | 2 | Rob |
| 1999 | administrators | 23 | None | Marsha |
| 1999 | administrators | 11 | None | Ryan |
| 1999 | administrators | 14 | None | Bob |
+-----------+---------------------+----+---------------+----------+
对于管理员来说,student_level 列将为空。问题是如果我使用 explode 函数,我最终会将所有这些项目放在不同的列中。
是否可以在 Pyspark 中完成此操作?我的一个想法是弄清楚如何将 4 个数组列组合成 1 个数组,然后对数组进行分解,尽管我不确定组合结构数组并将列名作为字段是否可行(我'我已经尝试过各种方法)而且我也不知道如果管理员遗漏了一个字段是否可行。
过去,我通过转换为 RDD 并使用平面图/自定义 udf 来完成此操作,但对于数百万行来说效率非常低。
最佳答案
想法是使用stack转换列 students
, teaching_assistants
, teachers
和 administrators
分成单独的行,每个行都有正确的值 type
.之后,可以分解包含数据的列,然后将单个结构的元素转换为单独的列。
使用 stack
要求堆叠的所有列都具有相同的类型。这意味着所有列必须包含相同结构的数组,并且该结构的所有元素的可空性必须匹配。因此 administrators
列必须首先转换为正确的结构类型。
df.withColumn("administrators", F.expr("transform(administrators, " +
"a -> if(1<2,named_struct('id', a.id, 'name', a.name, 'student_level', "+
"cast(null as long)),null))"))\
.select("School_id", F.expr("stack(4, 'students', students, "+
"'teaching_assistants', teaching_assistants, 'teachers', teachers, "+
"'administrators', administrators) as (type, temp1)")) \
.withColumn("temp2", F.explode("temp1"))\
.select("School_id", "type", "temp2.id", "temp2.name", "temp2.student_level")\
.show()
打印
+---------+-------------------+---+--------+-------------+
|School_id| type| id| name|student_level|
+---------+-------------------+---+--------+-------------+
| 1999| students| 1| Brian| 0|
| 1999| students| 9| Max| 2|
| 1999|teaching_assistants| 19| Xander| 0|
| 1999| teachers| 21|Charlene| 0|
| 1999| teachers| 12| Rob| 2|
| 1999| administrators| 23| Marsha| null|
| 1999| administrators| 11| Ryan| null|
| 1999| administrators| 14| Bob| null|
+---------+-------------------+---+--------+-------------+
奇怪的样子if(1<2, named_struct(...), null)
在第一行中,必须为 administrators
的元素设置正确的可空性数组。
此解决方案适用于 Spark 2.4+。如果有可能 transform administrators
struct 在上一步中,此解决方案也适用于早期版本。
关于python-3.x - 如何实现自定义 Pyspark 爆炸(用于结构数组),4 列合 1 爆炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64216766/
我正在尝试在 Pyspark 中实现自定义爆炸。我有 4 列,它们是具有几乎相同架构的结构数组(一列结构包含的字段比其他三列少一个)。 对于我的 DataFrame 中的每一行,我有 4 列是结构数组
我如何分解 [group_concat(DISTINCT LineItem.ItemID)] => 600278,WH1502。 我试过了,但什么也没显示 $result = mysqli_query
假设我有一个数据框 df : C1 C2 C3 C4 C5 0 [A] [1] s1 [123]
我的数据在其中一个字段中具有嵌套映射。例如,数据位于名为“customers”的表中,如下所示: 姓名:比尔·琼斯 地址:{"billing":{"street":"123 Main", "city"
我有两个独立的项目(ejb,web),完全独立。问题是我想通过maven将ejb项目添加到web依赖项,但我正在寻找一个爆炸依赖项而不是jar,所以当我编译ejb项目时,更改会立即在web项目中生效。
我正在将我的 ROOT.war 文件复制到 Tomcat 6.0 的 webapps 中。有没有一种方法可以在复制时分解文件。即当我的脚本在 webapps 中复制它时..它应该爆炸并创建 ROOT
我有一个体素世界,类似于 Minecraft。每个体素( block )的大小为 1x1x1。 我想计算具有给定爆炸半径的特定位置的爆炸破坏,这意味着游戏将在该位置周围破坏体素(给定所需的半径)。 意
在我的游戏中有一辆坦克。我有一个扩展 Sprite 的 Barrel 类,这个类负责处理与桶相关的东西,其中之一就是射击时的爆炸动画。这就是我尝试这样做的方式: batch.draw(currShot
我一直在严重依赖 CSS 来创建我正在开发的网站。现在,所有 CSS 样式都在每个标签的基础上应用,所以现在我试图将其移动到更多的外部样式以帮助将来进行任何更改。 但现在的问题是我注意到我收到了“CS
我有一个 NSString:@"1a,1b,1c,1d,5c"。我想把这个 NSString 分成一个 NSMutableArray,但我不知道如何。我认为它相当简单,但我找不到它(也许是因为我的英语
我正在尝试使用 QML Canvas.requestAnimationFrame 来绘制一些自定义动画。我预计所提供的回调每帧调用一次,大约每秒 60 次。我的代码是: Canvas { id
我有: df = pd.DataFrame({'col1': ['asdf', 'xy', 'q'], 'col2': [1, 2, 3]}) col1 col2 0 asdf 1
在对 this question 的回答中MathWorks 支持团队声明: It is also possible to overload the ! (bang) operator by crea
好吧——穿上你 70 年代的喇叭裤,然后走进 WayBack 机器……迪斯科又活了,伙计们……(我怀疑这有标签……) 我需要 UUCP 的继任者。对你们这些 child 来说,在互联网出现之前和拜赛因
我今天阅读的一个问题的答案建议将应用程序部署为展开(解压缩)WAR .这让我开始思考。 我对 JBoss/Tomcat 所做的每一次部署都使用了 WAR/EAR文件。至少在我的内存中。 这些年来我一直
我有一个包含以下内容的 Spark Dataframe: 姓名E1E2E3abc456 我需要各种 E列成为新列中的行,如下所示: 姓名值E类型abc4E1abc5E2abc6E3 This answ
$user = $this->user; $user->name = $request['name']; $user->email = $request
我正在使用 Java 1.6、JBoss 5.1、EJB 3 和 Hibernate 2。每次部署 ear 时,如果 jar 是紧凑型(未展开),应用程序将无法运行。但是,当我炸开 jar 然后将其放
我是 dask 的新手,请多多包涵。 我有一个 JSON 文件,其中每一行都有以下架构: { 'id': 2, 'version': 7.3, 'participants': range(10)
我尝试使用 Chai Should 风格的断言,但是下面的语句让 Mocha 爆炸了。这是我完整的 Require block : /**
我是一名优秀的程序员,十分优秀!