【发布时间】:2022-01-01 19:15:08
【问题描述】:
我在从 hdfs hive 上下文中排序数据帧时遇到问题。 尝试对结构类似的数据框进行排序:
+---+--------------+---------------+
| id|parameter_name|parameter_value
+---+--------------+---------------+
|id1| name_en | value a
|id1| name_il | value b
|id1| address_en| value c
|id1| address_il| value d
|id2| name_il | value f
|id2| name_en | value e
|id2| address_il| value h
|id1| address_en| value g
+---+--------------+---------------+
我正在尝试以对 id 进行排序的方式对这个数据框进行排序,并且每个 id 的 df 中的 parameter_name 序列如下:
name_en
name_il
address_en
address_il
请注意,在示例中并非如此,并且 id 之间的名称和地址是翻转的。
尝试使用 df.sort(["id","parameter_name"]) 会产生混合结果,进一步混合数据帧并将 id 拆分为:
id1, name_en
id1, name_il
id2, name_il
id2, name_en
id1, address_en
id1, address_il
id2, address_il
id2, address_en
【问题讨论】:
-
我在做
df.sort(["id","parameter_name"])时没有得到相同的结果。 -
这是一个简化的例子。实际的数据框在一个蜂巢中并且更大。本质上,当按多列排序时,它按第一个元素对 df 进行排序,然后将每个已排序组中的任何未排序元素也固定为要排序的。这在我的情况下中断,我试图了解是否有解决方法
-
你是什么意思“打破”?它失败并出现错误?什么错误?
-
不,没有错误。返回的表未排序。而不是 id1, name_en id1, name_il id1, address_en id1, address_il id2, name_en id2, name_il id2, address_en id2, address_il 以它返回的所需方式排序: id1, name_en id1, name_il id2, name_il id2, name_en id1, address_en id1, address_il id2, address_il id2, address_en
-
你会
df.sort(...); df.show()吗?或df.sort(...).show()?或df = df.sort(...); df.show()?sort是一个转换,它返回一个数据帧。如果要在执行操作show或write之前保存转换,则需要将此数据帧分配回df。
标签: python dataframe sorting pyspark hive