我想收集一个列表,其中包含每个 id1 中具有相同或更低级别的 id2 的所有值。为了实现这一点,我使用窗口函数和 collect_list 函数。但是,我没有得到...
我想收集组内具有相同或较低级别每个 id1 的所有 id2 值的列表。
为了实现这一点,我使用了窗口函数和 collect_list 函数。但是,我在这里没有得到条件部分。如何解决?
df = spark.createDataFrame([
("A", 0, "M1", "D1"),
("A", 1, "D1", "D2"),
("A", 2, "D2", "D3"),
("A", 3, "D3", "D4"),
("B", 0, "M2", "D5"),
("B", 1, "D4", "D6"),
("B", 2, "D5", "D7")
], ["group_id", "level", "id1", "id2"])
window = Window.partitionBy('group_id').orderBy('level').rowsBetween(
Window.unboundedPreceding, Window.unboundedFollowing
)
df_with_list = df.withColumn(
"list_lower_level",
F.collect_list("id2").over(window)
)
df_with_list.show()
输出如下:
+--------+-----+---+---+----------------+
|group_id|level|id1|id2|list_lower_level|
+--------+-----+---+---+----------------+
| A| 0| M1| D1|[D1, D2, D3, D4]|
| A| 1| D1| D2|[D1, D2, D3, D4]|
| A| 2| D2| D3|[D1, D2, D3, D4]|
| A| 3| D3| D4|[D1, D2, D3, D4]|
| B| 0| M2| D5| [D5, D6, D7]|
| B| 1| D4| D6| [D5, D6, D7]|
| B| 2| D5| D7| [D5, D6, D7]|
+--------+-----+---+---+----------------+
然而,我想实现这个目标:
+--------+-----+---+---+----------------+
|group_id|level|id1|id2|list_lower_level|
+--------+-----+---+---+----------------+
| A| 0| M1| D1|[D1, D2, D3, D4]|
| A| 1| D1| D2|[D2, D3, D4]|
| A| 2| D2| D3|[D3, D4]|
| A| 3| D3| D4|[D4]|
| B| 0| M2| D5| [D5, D6, D7]|
| B| 1| D4| D6| [D6, D7]|
| B| 2| D5| D7| [D7]|
+--------+-----+---+---+----------------+
我必须从 plotly 体积图中删除图例。这样做的唯一原因是我正在制作一张海报,上面有很多类似的人物,我只保留一个带有图例的人物,
我必须从 plotly 体积图中删除图例。这样做的唯一原因是我正在制作一张海报,其中有很多类似的图形,我将只保留一个带有图例的图形,并删除其他图形以节省一些空间。我已经浪费了两个多小时,但还是想不通。以下是示例代码:
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import numpy as np
# Sample data
x, y, z = np.mgrid[0:1:10j, 0:1:10j, 0:1:10j]
values = np.sin(x**2 + y**2 + z**2)
# Create the figure
fig = make_subplots(rows=1, cols=1, specs=[[{'type': 'scene'}]], subplot_titles=['Sample Volume Plot'])
# Add the volume trace
fig.add_trace(go.Volume(
x=x.flatten(), y=y.flatten(), z=z.flatten(),
value=values.flatten(),
isomin=0, isomax=1, opacity=0.1, surface_count=15, colorscale='Inferno'
), row=1, col=1)
# Update layout to remove the legend
fig.update_layout(
title="Sample Volume Plot",
height=650, width=900,
title_x=0.5,
showlegend=False # Not working
)
# Show the plot
fig.show()
非常感谢你的帮助。 是我最后的希望。