如何从键值对列表中创建 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的主要内容,如果未能解决你的问题,请参考以下文章