8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

按照条件收集窗口函数内的列表,pyspark

Torben Klein 2月前

133 0

我想收集一个列表,其中包含每个 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]|
+--------+-----+---+---+----------------+
帖子版权声明 1、本帖标题:按照条件收集窗口函数内的列表,pyspark
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Torben Klein在本站《python》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 所以我有一个网站,我想要的是当打开我的网站时:www.example.com/download.html 我想首先检测设备是 iOS 设备还是 Android 设备,然后重定向到另一个

    所以我有一个网站,我想要的是当打开我的网站时:www.example.com/download.html 我想首先检测设备是 iOS 设备还是 Android 设备,然后重定向到另一个链接,例如 www.google.com(仅举个例子)。我希望为不同的操作系统提供不同的链接。有什么关于如何管理它的提示吗?:)

  • 我必须从 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()
    

    非常感谢你的帮助。 是我最后的希望。

  • 我需要使用 Puthon 自动化 PuTTY Windows 应用程序。我尝试使用 pywimauto 以及 pyautogui 模块。我可以启动 PuTTy 应用程序,但无法进行进一步的活动...

    我需要使用 Puthon 自动化 PuTTY Windows 应用程序。我尝试使用 pywimauto 和 pyautogui 模块。我可以启动 PuTTy 应用程序,但无法执行进一步的操作,例如输入主机名或打开保存会话,也无法在连接到 PuTTY 后执行一些单击和键入操作。以下是我尝试过的-

    from pywinauto inport application from pywinnauto.keyboard import send_keys import time
    # Path to the PUTTY executable
    putty_path = r"C:\Program Files\PuTTY\putty.exe* # Adjust if necessary
    # Launch PUTTY application
    app = application. Application(backend="uia").start(putty_path)
    # Connect to the PUTTY window
    putty_window = app.window()
    # Wait for PUTTY to be fully Loaded
    time.sleep (2)
    # Set the hostname
    putty_window.child_window(title="Host Name (or IP address)", control_type="Edit").set_text(hostname) putty_window.child_window(title="Port", control_type="Edit").set_text(port)
    # Click on Open button
    putty_window.child_window(title="Open", control_type="Button").click()
    # Wait for the terminal to open and prompt for user input
    time.sleep(5)
    

    任何可以实现上述目标的想法/方法都将非常有帮助。提前致谢!

  • 在我看来,在第二个 if 中搜索 \'Mobi\' 是不必要的,因为第一个 if 已经捕获了这种情况。总的来说,仅凭这一点,我认为这不会正常工作。

  • 您可以使用 Navigator 确定设备的类型

    function navigate() {
        if((/Mobi|Android/i.test(navigator.userAgent))){
            window.location.href = 'android url ';
        }
        if(/Mobi|iPad|iPhone|iPod/i.test(navigator.userAgent)){
            window.location.href = 'ios url ';
        }
    }
    
  • 我需要在 html 文件中添加其他内容吗?您还可以显示代码是否适用于计算机而非设备?

  • 是的,您可以使用 window.location.replace(\'some link\'); 或 window.location.href = \'some link\'; 重定向用户。

  • 您可以使用用户代理字符串来检测不同类型的设备,如下所示:

    function androidOrIOS() {
        const userAgent = navigator.userAgent;
        if(/android/i.test(userAgent)){
            return 'android';
        }
        if(/iPad|iPhone|iPod/i.test(userAgent)){
            return 'ios';
        }
    }
    
  • 另外,如果你不想在源代码中放入太多代码,那么快速的 Google 搜索就会找到一个看起来很有前途的库:

  • 非常感谢@r-beginners 的大力帮助。我非常感谢你提供的如此慷慨和友善的帮助。

  • 如果您只是不想显示颜色标度,请添加 showscale=False 。我还没有在子图上测试过这一点,但我也相信可以通过设置在每个图形中显示或隐藏颜色标度来实现。

    # 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',
        showscale=False, #update 
    ), row=1, col=1)
    

    enter image description here

  • 为什么?!?! PuTTY 只是 ssh 和 telnet 的图形包装器 - 它们都是可以轻松编写脚本的命令行实用程序。

  • 在这种情况下,您不需要查看前几行,尝试这个窗口:

    window = Window.partitionBy('group_id').orderBy('level').rowsBetween(
        0, Window.unboundedFollowing
    )
    
返回
作者最近主题: