小编Sar*_*ata的帖子

什么时候在 Spark 数据帧上使用 persist() 性能不实用?

在致力于提高代码性能时,因为我有许多作业失败(中止),persist()所以每当我需要在许多其他操作中使用相同的数据帧时,我都会考虑使用 Spark Dataframe 上的函数。在执行此操作并跟踪 Spark 应用程序 UI 中的作业、阶段时,我觉得这样做并不总是最佳,这取决于分区数量和数据大小。我不确定直到我因为坚持阶段失败而中止工作。

我想知道在数据帧上执行许多操作时使用的最佳实践是否始终有效?persist() 如果不是,什么时候不是?怎么判断?

更具体地说,我将展示我的代码和中止作业的详细信息:

#create a dataframe from another one df_transf_1 on which I made a lot of transformations but no actions
spark_df = df_transf_1.select('user_id', 'product_id').dropDuplicates()
#persist
spark_df.persist()
products_df = spark_df[['product_id']].distinct()
df_products_indexed = products_df.rdd.map(lambda r: r.product_id).zipWithIndex().toDF(['product_id', 'product_index'])
Run Code Online (Sandbox Code Playgroud)

你可能会问我为什么坚持spark_df?products_df这是因为我将像 with和 in 一样多次使用它joins(例如:spark_df = spark_df.join(df_products_indexed,"product_id")

工作阶段

第三阶段失败原因详情:

由于阶段失败而中止作业:阶段 3.0 中的任务 40458 失败了 4 次,最近一次失败:阶段 3.0 中丢失任务 40458.3(TID 60778,xx.xx.yyyy.com,执行器 91):ExecutorLostFailure(执行器 91 因一而退出)正在运行的任务)原因:从站丢失驱动程序堆栈跟踪:

输入数据的大小(4 TB …

python-2.7 apache-spark pyspark apache-spark-2.3

9
推荐指数
2
解决办法
6815
查看次数

Jupyter Notebook 运行服务器列表 - ValueError:无法解码 JSON 对象

我想使用命令行获取正在运行的服务器列表:

jupyter notebook list
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Traceback (most recent call last):
  File "/home/sarah/anaconda3/envs/py27/bin/jupyter-notebook", line 11, in <module>
    sys.exit(main())
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/notebook/notebookapp.py", line 1571, in start
    super(NotebookApp, self).start()
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/jupyter_core/application.py", line 255, in start
    self.subapp.start()
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/notebook/notebookapp.py", line 483, in start
    serverinfo_list = list(list_running_servers(self.runtime_dir))
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/notebook/notebookapp.py", line 1667, in list_running_servers
    info = json.load(f)
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/json/__init__.py", line 291, in load
    **kw)
  File "/home/sarah/anaconda3/envs/py27/lib/python2.7/json/__init__.py", line 339, in loads …
Run Code Online (Sandbox Code Playgroud)

python jupyter-notebook

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

使用OpenCV改进自然图像中的OCR文本检测/分割

我正在研究OCR文本检测和识别问题,在使用Opencv和Tesseract库在一些图像上尝试使用OpenCV 3进行文本场景检测和识别后,我做了一些评论(手动检查图像输出,分割输出和识别输出后)图片)我正在寻找如何通过在代码中进行更改来改善结果.

首先,图像是原始的黑白色(主要是灰色,文本是黑色还是白色),文本可以是数字和字母字符的组合.

1 - 当文本颜色强度与背景颜色强度没有太大差异时,不会检测到文本.

2-当图像包含例如"63H"时,它被正确检测到,但如果它们之间有更多空间(例如:"63 H")则根本检测不到.

3 - 当不同的文本区域没有完全对齐时(图像角度不同于同一形式的另一个正确文本检测),文本的一部分被检测到,另一部分未被检测到(例如,文本= 12548 58A.12548是第一部分.58A是第2部分).

我试图分析结果,并认为这些评论背后的原因可能是在ERGrouping阶段('使用穷举搜索算法分组算法.对任意导向文本进行分组会给我带来更糟糕的结果).如果是这样如何改进呢?

任何人都可以帮助我更好地理解言论的原因吗?(很遗憾,我无法分享图片,因为它们是保密的)

我可以对分类器参数进行哪些修改以改善结果(我使用的是opencv提供的默认分类器文件)?

createERFilterNM1(const Ptr<ERFilter::Callback>& cb, int thresholdDelta=1, float minArea=0.00025, float maxArea=0.13, float minProbability=0.4, bool nonMaxSuppression=true, float minProbabilityDiff=0.1 )
Run Code Online (Sandbox Code Playgroud)

我可以尝试哪些其他方法?(选项是关于库和语言的开放(Python/C++).// TextRecognition.cpp:définitlepoint d'entréepourl'application console.///**textdetection.cpp*

 */

#include "opencv2/text.hpp"
#include "opencv2/core/utility.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <fstream>

#include <iostream>

using namespace std;
using namespace cv;
using namespace cv::text;

//Calculate edit distance between two words
size_t edit_distance(const string& A, const string& B);
size_t …
Run Code Online (Sandbox Code Playgroud)

c++ python ocr opencv tesseract

5
推荐指数
0
解决办法
1155
查看次数

PySpark DataFrame在使用爆炸之前将字符串的列更改为数组

我在spark DataFrame中有一列名为event_data的json格式,使用读取后from_json,得到以下模式:

root
 |-- user_id: string (nullable = true)
 |-- event_data: struct (nullable = true)
 |    |-- af_content_id: string (nullable = true)
 |    |-- af_currency: string (nullable = true)
 |    |-- af_order_id: long (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我只需要af_content_id此列。此属性可以具有不同的格式:

  • 一个字符串
  • 整数
  • Int和Str的列表。例如['ghhjj23','123546',12356]
  • 无(有时event_data不包含af_content_id)

    我想使用explode函数以便为af_content_id格式为List的每个元素返回新行。但是当我应用它时,我得到一个错误:

    from pyspark.sql.functions import explode
    
    def get_content_id(column):
        return column.af_content_id
    
    df_transf_1 = df_transf_1.withColumn(
        "products_basket", 
        get_content_id(df_transf_1.event_data)
    )
    
    df_transf_1 = df_transf_1.withColumn(
        "product_id",
        explode(df_transf_1.products_basket)
    )
    
    Run Code Online (Sandbox Code Playgroud)

    products_basket …

  • apache-spark-sql pyspark

    5
    推荐指数
    1
    解决办法
    1432
    查看次数

    Pyspark 错误 - py4j.Py4JException:方法限制([class java.lang.String])不存在

    当执行代码从 HDFS 获取 Spark 数据帧,然后将其转换为 pandas 数据帧时,

    spark_df = spark.read.parquet(*data_paths)
    # other code in the process like filtering, groupby etc.
    # ....
    # write sparkdf to hadoop, get n rows if specified
            if n:
                spark_df.limit(n).write.csv(tmpfoldername, sep=csv_sep, quote=csv_quote)
            else:
                spark_df.write.csv(tmpfoldername, sep=csv_sep, quote=csv_quote)
    
    Run Code Online (Sandbox Code Playgroud)

    我收到错误:

    /home/sarah/anaconda3/envs/py27/lib/python2.7/site-packages/dspipeline/core/wf_spark.pyc in to_pd(spark_df, n, save_csv, csv_sep, csv_quote, quick)
        215         # write sparkdf to hadoop, get n rows if specified
        216         if n:
    --> 217             spark_df.limit(n).write.csv(tmpfoldername, sep=csv_sep, quote=csv_quote)
        218         else:
        219             spark_df.write.csv(tmpfoldername, sep=csv_sep, quote=csv_quote)
    
    /opt/spark-2.3.0-SNAPSHOT-bin-spark-master/python/pyspark/sql/dataframe.py in limit(self, num)
        472 …
    Run Code Online (Sandbox Code Playgroud)

    apache-spark apache-spark-sql pyspark

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

    从Pandas DataFrame创建篮子-不是标准交易数据集

    我正在使用熊猫处理数据集。数据集的形式为:

    user_id product_id

    用户1产品1

    用户2产品3

    用户1产品2

    也许这更清楚:

    数据集= [[user1,product1],[user2,product3],[user1,product2]]

    我的目标是使用此数据集为要购买的产品提出建议。我将使用关联规则-先验算法。

    由于我没有一个典型的交易数据集,且该交易数据集同时购买了1个以上的产品(在相同的交易ID中),因此我只能使用该数据集,因此我考虑考虑,如果user1购买了产品1和产品2,则该产品1和产品2一起购买。

    之后,我将使用关联规则/先验算法来创建规则。但是要做到这一点,我需要将数据包含在中。形式:

    数据= [[产品1,产品2],[产品2],[产品3,产品1,产品2]]

    所以我需要以下形式的数据集:

    数据集= [[user1,product1,product2],[user2,product3]]

    之后,我可以继续进行其他步骤来应用apriori ..一键编码,发现频繁项等。

    df.groupby(['user_id'])['product_id']
    
    Run Code Online (Sandbox Code Playgroud)

    无法使用groupby,因为我必须应用一个函数..而且透视功能也无法工作..而这些是我在尝试进行转换时唯一想到的一个。

    python pandas

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