如何从键值对列表中创建 Spark Row

Posted

技术标签:

【中文标题】如何从键值对列表中创建 Spark Row【英文标题】:How to create Spark Row from list of key-value pairs 【发布时间】:2017-10-01 10:57:38 【问题描述】:

假设我有一个键值对列表:

kvs = [('x', 0), ('a', 1)]

现在我想从 kvs 创建一个 Spark Row,其键顺序与 kvs 中的键顺序相同。 在Python怎么办?

【问题讨论】:

将 I 转换为 dict 并使用 Row(**kvs) 它不保留对的顺序。 你可以使用 OrderedDict ***.com/questions/38253385/… 【参考方案1】:

我还没有运行它,但是如果失败,我会在运行后编辑。

from pyspark.sql import Row
kvs = [('x', 0), ('a', 1)]
h = 
[h.update(k:v) for k,v in kvs]
row = Row(**h)

【讨论】:

谢谢,但它不会保留kvs 中的对的顺序, 检查如何使用 OrderedDict ***.com/questions/38253385/…保留订单【参考方案2】:

你可以:

from pyspark.sql import Row

Row(*[k for k, _ in kvs])(*[v for _, v in kvs])

但我认为最好避免使用Row。除了作为一个方便的类来表示从 JVM 后端获取的本地值之外,它在 Spark 中没有特殊含义。几乎在所有情况下:

tuple(v for _, v in kvs)

Row 的完美替代品。

【讨论】:

以上是关于如何从键值对列表中创建 Spark Row的主要内容,如果未能解决你的问题,请参考以下文章

如何从键值对数组创建对象?

Spark学习笔记3:键值对操作

如何从飞镖颤动中的键或键值对获取索引

将数据从键值对提取到 Google Bigquery 中的列标题

SQL - 从键值对中提取值到数组

有没有办法在 Bash 脚本中创建键值对?