小编Yts*_*oer的帖子

避免Spark窗口函数中单个分区模式的性能影响

我的问题是由计算spark数据帧中连续行之间差异的用例触发的.

例如,我有:

>>> df.show()
+-----+----------+
|index|      col1|
+-----+----------+
|  0.0|0.58734024|
|  1.0|0.67304325|
|  2.0|0.85154736|
|  3.0| 0.5449719|
+-----+----------+
Run Code Online (Sandbox Code Playgroud)

如果我选择使用"Window"函数计算它们,那么我可以这样做:

>>> winSpec = Window.partitionBy(df.index >= 0).orderBy(df.index.asc())
>>> import pyspark.sql.functions as f
>>> df.withColumn('diffs_col1', f.lag(df.col1, -1).over(winSpec) - df.col1).show()
+-----+----------+-----------+
|index|      col1| diffs_col1|
+-----+----------+-----------+
|  0.0|0.58734024|0.085703015|
|  1.0|0.67304325| 0.17850411|
|  2.0|0.85154736|-0.30657548|
|  3.0| 0.5449719|       null|
+-----+----------+-----------+
Run Code Online (Sandbox Code Playgroud)

问题:我在一个分区中明确地划分了数据帧.这会对性能产生什么影响,如果存在,为什么会这样,我怎么能避免它呢?因为当我没有指定分区时,我收到以下警告:

16/12/24 13:52:27 WARN WindowExec: No Partition Defined for Window operation! Moving all data to a single partition, this can cause serious performance degradation.
Run Code Online (Sandbox Code Playgroud)

partitioning window-functions apache-spark apache-spark-sql pyspark

15
推荐指数
1
解决办法
9714
查看次数

Swagger 编辑器如何指定请求正文(POST)中的哪些字段是必需的?

我正在尝试在在线 Swagger 编辑器中的用户类上定义 POST 方法。

我希望能够在请求正文中指定多个字段,并且希望生成的文档能够反映出只有 2 个字段是必需的,其他字段是可选的。

我必须做什么/改变才能做到这一点?

我已经尝试过使用“required”关键字进行各种变体(请参见下图),但无法实现该功能,它没有显示在生成的文档中(请参见右下图和我的注释)红色的)。

这是我在编辑器中的 POST 定义:

在此输入图像描述

这是生成的文档预览,我在其中指出了我希望看到更改的内容。

在此输入图像描述

附言。还有一些(较旧的)帖子解决了这个问题,但我真的不认为这是重复的。

swagger-editor openapi

7
推荐指数
1
解决办法
2万
查看次数

如何在tracemalloc快照比较中从回溯获取更多帧(python 3.6)?

我的问题的描述

我正在尝试追查 python 3.6 程序中的内存泄漏。

为此,我正在测试tracemalloc,它允许我比较内存快照并打印出“回溯”。

tracemalloc.start()根据文档,回溯中的最大帧数应设置为第一个参数。

然而,在我的最小测试设置(下面的代码)中,我使用参数 25 启动tracemalloc,但我在回溯中只得到 1 帧,而我期望的是 2 帧:

我得到的输出

me@my_machine:/tmp$ python ./test_tm.py 

Entry: /tmp/test_tm_utils.py:2: size=3533 KiB (+3533 KiB), count=99746 (+99746), average=36 B
Traceback:
  /tmp/test_tm_utils.py:2
Run Code Online (Sandbox Code Playgroud)

我期望的输出

我期望有两行,如下所示:

Entry: /tmp/test_tm_utils.py:2: size=3533 KiB (+3533 KiB), count=99746 (+99746), average=36 B
Traceback:
  /tmp/test_tm_utils.py:2
  /tmp/test_tm.py:10
  ^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

最小代码示例

主程序在_/tmp/test_tm.py_中:

import tracemalloc

tracemalloc.start(25)
import test_tm_utils


if __name__ == '__main__':

    s1 = tracemalloc.take_snapshot()
    test_tm_utils.myfun()

    s2 = tracemalloc.take_snapshot()

    diff = s2.compare_to(s1, 'lineno')

    for entry in diff[:1]:
        print('\nEntry: {}'.format(entry))
        print('Traceback:') …
Run Code Online (Sandbox Code Playgroud)

memory-leaks python-3.6

4
推荐指数
1
解决办法
1048
查看次数

如何在pyspark中使用log4j配置特定记录器的日志级别?

这个StackOverflow 线程中,我知道如何在 pyspark 中获取和使用 log4j 记录器,如下所示:

from pyspark import SparkContext
sc = SparkContext()
log4jLogger = sc._jvm.org.apache.log4j
LOGGER = log4jLogger.LogManager.getLogger('MYLOGGER')
LOGGER.info("pyspark script logger initialized")
Run Code Online (Sandbox Code Playgroud)

这适用于spark-submit脚本。

我的问题是如何修改log4j.properties文件以配置此特定记录器的日志级别或如何动态配置它?

logging log4j apache-spark pyspark

3
推荐指数
1
解决办法
4852
查看次数