我想开展一些pyspark工作YARN
.我有2个节点,每个节点10 GB.我可以像这样打开pyspark shell: pyspark
现在,当我有一个非常简单的例子,我试图启动:
import random
NUM_SAMPLES=1000
def inside(p):
x, y = random.random(), random.random()
return x*x + y*y < 1
count = sc.parallelize(xrange(0, NUM_SAMPLES)) \
.filter(inside).count()
print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)
Run Code Online (Sandbox Code Playgroud)
因此,我得到一个带有错误输出的非常长的火花日志.最重要的信息是:
ERROR cluster.YarnScheduler: Lost executor 1 on (ip>: Container marked as failed: <containerID> on host: <ip>. Exit status 1. Diagnostics: Exception from container-launch. ......
Run Code Online (Sandbox Code Playgroud)
后来我在日志中看到......
ERROR scheduler.TaskSetManager: Task 0 in stage 0.0 failed 1 times: aborting job
INFO cluster.YarnClientSchedulerBackend: Asked …
Run Code Online (Sandbox Code Playgroud) 我使用这些设置(以及其他)启动了一个spark作业:
spark.driver.maxResultSize 11GB
spark.driver.memory 12GB
Run Code Online (Sandbox Code Playgroud)
我正在调试我的pyspark
工作,它一直给我错误:
serialized results of 16 tasks (17.4 GB) is bigger than spark.driver.maxResultSize (11 GB)
Run Code Online (Sandbox Code Playgroud)
所以,我在配置设置中增加了spark.driver.maxResultSize
to 18 G
.而且,它工作!!
现在,这很有趣,因为在这两种情况下spark.driver.memory
是SMALLER比系列化返回结果.
为什么允许这样做?我认为这是不可能的,因为序列化的结果是17.4 GB
在我调试的时候,这超过了驱动程序的大小12 GB
,如上所示?
这怎么可能?
我有一些这样的输出ls -alth
:
drwxr-xr-x 5 root admin 170B Aug 3 2016 ..
drwxr-xr-x 5 root admin 70B Aug 3 2016 ..
drwxr-xr-x 5 root admin 3B Aug 3 2016 ..
drwxr-xr-x 5 root admin 9M Aug 3 2016 ..
Run Code Online (Sandbox Code Playgroud)
现在,我想解析出170B
部分,这显然是人类可读格式的大小。我想使用cut
or来做到这一点sed
,因为我不想使用比必要更复杂/难以使用的工具。
理想情况下,我希望它足够健壮,可以处理大小附带的B
,M
或K
后缀,并相应地乘以1
,1000000
并1000
相应地。不过,我还没有找到一个好的方法来做到这一点。
我已经尝试了一些事情,但并不知道最好的方法:
ls -alth | cut -f 5 -d \s+
Run Code Online (Sandbox Code Playgroud)
我希望这会奏效,因为我可以在一个或多个空格上分隔它。
但这不起作用。如何提供cut
正则表达式分隔符?或者有没有更简单的方法来只提取文件的大小ls -alth
?
我正在使用 CentOS6.4
我尝试IDLE
从 cygwin启动,但出现以下错误:
Traceback (most recent call last):
File "/usr/bin/idle", line 5, in <module>
main()
File "/usr/lib/python2.7/idlelib/PyShell.py", line 1537, in main
root = Tk(className="Idle")
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1764, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Run Code Online (Sandbox Code Playgroud)
我可以IDLE
从idle.bat
文件中 启动cygstart idle.bat
.
我搜索了此错误的解释,但找不到。我还在IDLE
cygwin 中添加了一个环境变量。当我这样做时printenv
,它显示为一个环境变量。以防万一这是问题,我尝试了两个环境变量:
idle=C:\Python27\Lib\idlelib\idle.bat
PATH = cygdrive/c/Python27/Lib/idlelib
我还安装了 cygwinIDLE
包。
可能是什么问题呢?
我在 python 的 scikit learn 中使用聚类模块,我想使用归一化欧几里德距离。这个(我知道的)没有内置距离。这是一个列表。
因此,我想使用可调用对象实现我自己的归一化欧几里得距离。该函数是我的distance
模块的一部分,称为distance.normalized_euclidean_distance
. 它采用三个输入: X
,Y
,和SD
。
但是,归一化欧几里得距离需要总体样本的标准差。但是,scipy 中的成对距离只允许两个输入:X
和Y
。
我如何让它接受额外的论点?
我试着把它作为 a **kwarg
,但这似乎不起作用:
cluster = DBSCAN(eps=1.0, min_samples=1,metric = distance.normalized_euclidean, SD = stdv)
Run Code Online (Sandbox Code Playgroud)
这里distance.normalized_euclidean
是发生在两个数组,我写的功能,X
以及Y
并计算它们之间的归一化欧氏距离。
...但这会引发错误:
TypeError: __init__() got an unexpected keyword argument 'SD'
Run Code Online (Sandbox Code Playgroud)
使用附加关键字参数的方法是什么?
这里说Any further parameters are passed directly to the distance function.
,这让我认为这是可以接受的。
python scipy euclidean-distance keyword-argument scikit-learn
我正在尝试安装 Levenshtein 模块,如您在此处看到的。
我能够setup.py
通过 运行该文件python setup.py build
。
python
然后,当我通过从终端立即进入 python 时,在与文件夹相同的文件夹中Levenshtein
,我尝试导入它:
import Levenshtein
,
但我收到以下错误:
>>> import Levenshtein
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "Levenshtein/__init__.py", line 1, in <module>
from Levenshtein import _levenshtein
ImportError: cannot import name _levenshtein
Run Code Online (Sandbox Code Playgroud)
并且,当我查看文件夹时Levenshtein
,我看到两个与该名称相似的文件:
_levenshtein.c _levenshtein.h
Run Code Online (Sandbox Code Playgroud)
这个导入有什么意义,我应该如何获取名称为 的文件_levenshtein
?
我想从这样的列表中提取歌曲名称: 'some text here, songs: song1, song2, song3, fro: othenkl'
并 get ['song1', 'song2', 'song3']
。所以我尝试用一个正则表达式来完成它:
result = re.findall('[Ss]ongs?:?.*', 'songs: songname1, songname2,')
print re.findall('(?:(\w+),)*', result[0])
Run Code Online (Sandbox Code Playgroud)
这完全匹配:( ['', '', '', '', '', '', '', 'songname1', '', 'songname2', '']
除了空字符串,但是 nbd.
但我想用一行来完成,所以我执行以下操作:
print re.findall('[Ss]ongs?:?(?:(\w+),)*','songs: songname1, songname2,')
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么这无法捕获与上面两个正则表达式相同的内容:
['', 'name1', 'name2']
Run Code Online (Sandbox Code Playgroud)
有没有办法在一行中完成这个任务?这里简洁一些会很有用。谢谢。
我有一个函数需要将 a作为输入,例如以formula
的形式。y~x
然后,我需要通过一系列x-values
到该公式中以得出y
。
例如,如果我的公式是y~x^2
,并且我的 x 值系列是 (1,2,3,4),那么我应该期望 (1,4,9,16) 作为输出。
假设我有这样的公式:formula1 <- y~x
::
到目前为止,这是我尝试过的:
as.function(formula1)
model.frame
和model.matrix
像这样:就像这样:
formula1 <- y~x^2
x <- c(1,2,3,4)
my_data <- data.frame("x" = x, "y" = rep(0,length(x)))
model_frame <- model.frame(formula1, data = my_data)
my_design_matrix <- model.matrix(formula1, model_frame)
Run Code Online (Sandbox Code Playgroud)
我可以用什么来实现这个目的?
以下是我查阅的资源:
如何将公式应用于 R 中的向量?
我只是想将文本文件读入 pyspark RDD,我注意到sqlContext.read.load
和sqlContext.read.text
.
s3_single_file_inpath='s3a://bucket-name/file_name'
indata = sqlContext.read.load(s3_single_file_inpath, format='com.databricks.spark.csv', header='true', inferSchema='false',sep=',')
indata = sqlContext.read.text(s3_single_file_inpath)
Run Code Online (Sandbox Code Playgroud)
sqlContext.read.load
上面的命令失败
Py4JJavaError: An error occurred while calling o227.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org
Run Code Online (Sandbox Code Playgroud)
但是第二个成功了吗?
现在,我对此感到困惑,因为我在网上看到的所有资源都说要使用,sqlContext.read.load
包括这个:https : //spark.apache.org/docs/1.6.1/sql-programming-guide.html。
我不清楚何时使用这些中的哪一个。这些有明显的区别吗?
我想知道是否可以sympy
使用向量表示法求多项式和表达式的导数。例如,如果我有一个表达式作为两个坐标 x1 和 x2 的函数,我可以只调用一次diff(x)
,其中是和x
的向量,还是需要对和进行两次单独的调用,并将它们堆叠在一个矩阵?x1
x2
diff
x1
x2
这说明了什么是有效的,以及什么是我想要的理想工作:
import sympy
from sympy.matrices import Matrix
# I understand that this is possible:
x1 = sympy.symbol.symbols('x1')
x2 = sympy.symbol.symbols('x2')
expr_1 = x1**2+x2
poly_1 = sympy.poly(expr_1, x1, x2)
print Matrix([[poly_1.diff(x1)],[poly_1.diff(x2)]])
# but is something like this also possible?
x1 = sympy.symbol.symbols('x1')
x2 = sympy.symbol.symbols('x2')
x_vec = Matrix([[x1],[x2]])
expr_1 = x1**2+x2
poly_1 = sympy.poly(expr_1, x1, x2)
# taking derivative with respect to a vector
poly_1.diff(x_vec) …
Run Code Online (Sandbox Code Playgroud)