【发布时间】:2020-10-26 17:12:31
【问题描述】:
我是 pySpark 的新手,我正在尝试使用我可以访问的电表间隔数据集 (csv) 中的一些电表数据。
我有一个从 CSV 导入的电表数据创建的数据框架构,看起来像这样:
root
|-- _c0: string (nullable = true)
|-- _c1: integer (nullable = true)
|-- _c2: string (nullable = true)
|-- _c3: string (nullable = true)
|-- _c4: integer (nullable = true)
|-- _c5: string (nullable = true)
|-- _c6: long (nullable = true)
|-- _c7: string (nullable = true)
|-- _c8: string (nullable = true)
|-- _c9: string (nullable = true)
|-- _c10: string (nullable = true)
|-- _c11: double (nullable = true)
|-- _c12: integer (nullable = true)
|-- _c13: integer (nullable = true)
|-- _c14: long (nullable = true)
|-- _c15: string (nullable = true)
|-- _c16: double (nullable = true)
|-- _c17: long (nullable = true)
|-- _c18: string (nullable = true)
|-- _c19: double (nullable = true)
|-- _c20: long (nullable = true)
|-- _c21: string (nullable = true)
|-- _c22: double (nullable = true)
|-- _c23: long (nullable = true)
|-- _c24: string (nullable = true)
|-- _c25: double (nullable = true)
|-- _c26: long (nullable = true)
|-- _c27: string (nullable = true)
|-- _c28: double (nullable = true)
...
_c13 包含一个数字,表示它后面有多少个 3 数据列的分组。 (表示时间戳、标志和值)每条记录从 1 到 96 不等
(i.e. timestamp, flag, value)
_c14, _c15, _c16 = Group 1 (202010101315, "NONE", 1.1)
_c17, _c18, _c19 = Group 2 (202010101330, "NONE", 1.2)
_c20, _c21, _c22 = Group 3 (202010101345, "EST", 0.75) etc...
我认为我想要的 AWS Redshift 表的最终输出是源数据帧中每个分组的单行 _c0 到 _c12 将随每个分组输出
+-----+----+ +------+-------------+------+-------+
_c0 _c1 ... | _c12 | timestamp | flag | value |
+-----+----+ +------+-------------+------+-------+
A B ... L 202010101315 NONE 1.1
A B ... L 202010101330 NONE 1.2
A B ... L 202010101345 EST 0.75
etc...
到目前为止,我已经设法将我的数据加载到数据框中。为了遍历每一行,我意识到我可以创建一个带有自定义函数的 RDD 来对行执行操作:
rdd = df.rdd.map(customFunction)
但我很快意识到我只能将单个分组返回给 RDD
然后,我查看了从 customFunction 中将一行附加到新数据帧,但在读取数据帧是不可变的并且每次附加都会返回一个新数据帧之后,我意识到这可能效率不高。
任何关于实现我正在寻找的有效记录拆分的基本结构的帮助将不胜感激!
【问题讨论】:
-
如果我理解你想为从 c_14 到 c_96 的每个三元组做这样的事情:stackoverflow.com/a/42723968/7306659
标签: dataframe apache-spark pyspark split