在致力于提高代码性能时,因为我有许多作业失败(中止),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 …
我想使用命令行获取正在运行的服务器列表:
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) 我正在研究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) 我在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此列。此属性可以具有不同的格式:
['ghhjj23','123546',12356]
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 …
当执行代码从 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) 我正在使用熊猫处理数据集。数据集的形式为:
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,因为我必须应用一个函数..而且透视功能也无法工作..而这些是我在尝试进行转换时唯一想到的一个。
pyspark ×3
python ×3
apache-spark ×2
c++ ×1
ocr ×1
opencv ×1
pandas ×1
python-2.7 ×1
tesseract ×1