我正在对集群进行计算,最后当我使用 df.describe().show() 询问有关 Spark 数据帧的摘要统计信息时,出现错误:
序列化任务 15:0 为 137500581 字节,超过了最大允许值:spark.rpc.message.maxSize(134217728 字节)。考虑增加 spark.rpc.message.maxSize 或对大值使用广播变量
在我的 Spark 配置中,我已经尝试增加上述参数:
spark = (SparkSession
.builder
.appName("TV segmentation - dataprep for scoring")
.config("spark.executor.memory", "25G")
.config("spark.driver.memory", "40G")
.config("spark.dynamicAllocation.enabled", "true")
.config("spark.dynamicAllocation.maxExecutors", "12")
.config("spark.driver.maxResultSize", "3g")
.config("spark.kryoserializer.buffer.max.mb", "2047mb")
.config("spark.rpc.message.maxSize", "1000mb")
.getOrCreate())
Run Code Online (Sandbox Code Playgroud)
我还尝试使用以下方法重新分区我的数据框:
spark = (SparkSession
.builder
.appName("TV segmentation - dataprep for scoring")
.config("spark.executor.memory", "25G")
.config("spark.driver.memory", "40G")
.config("spark.dynamicAllocation.enabled", "true")
.config("spark.dynamicAllocation.maxExecutors", "12")
.config("spark.driver.maxResultSize", "3g")
.config("spark.kryoserializer.buffer.max.mb", "2047mb")
.config("spark.rpc.message.maxSize", "1000mb")
.getOrCreate())
Run Code Online (Sandbox Code Playgroud)
但我仍然不断收到同样的错误。
我的环境:Python 3.5、Anaconda 5.0、Spark 2
我怎样才能避免这个错误?
内容:
我目前正在使用带有Tensorflow后端的Keras进行时间序列预测,因此研究了此处提供的教程。
在学习完本教程之后,我开始fit_generator()描述该方法的生成器。该生成器生成的输出如下(左侧示例,右侧目标):
[[[10. 15.]
[20. 25.]]] => [[30. 35.]] -> Batch no. 1: 2 Samples | 1 Target
---------------------------------------------
[[[20. 25.]
[30. 35.]]] => [[40. 45.]] -> Batch no. 2: 2 Samples | 1 Target
---------------------------------------------
[[[30. 35.]
[40. 45.]]] => [[50. 55.]] -> Batch no. 3: 2 Samples | 1 Target
---------------------------------------------
[[[40. 45.]
[50. 55.]]] => [[60. 65.]] -> Batch no. 4: 2 Samples | 1 Target
---------------------------------------------
[[[50. 55.]
[60. 65.]]] => …Run Code Online (Sandbox Code Playgroud) 语境
为了fit_generator()在 Keras 中使用,我使用了一个像这样的伪代码-one的生成器函数:
def generator(data: np.array) -> (np.array, np.array):
"""Simple generator yielding some samples and targets"""
while True:
for batch in range(number_of_batches):
yield data[batch * length_sequence], data[(batch + 1) * length_sequence]
Run Code Online (Sandbox Code Playgroud)
在 Keras 的fit_generator()函数中,我想使用workers=4并且use_multiprocessing=True- 因此,我需要一个线程安全生成器。
在像here或here或Keras docs这样的stackoverflow的答案中,我读到了关于创建一个从Keras.utils.Sequence()这样继承的类:
class generatorClass(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return int(np.ceil(len(self.x) / float(self.batch_size)))
def __getitem__(self, idx):
batch_x …Run Code Online (Sandbox Code Playgroud) 我被迫在我自己不托管的 Linux 服务器上使用 JupyterLab。问题是 Jupyter 进程占用大量内存;这已成为多个错误报告的一部分,例如此处和此处。
无论如何,正如从介绍中可以预见的那样,我没有任何 sudo 权限,因此无法自己重新启动实验室(至少我认为这对我来说是不可能的)。
我认为奇怪的地方可以从 HTOP 的屏幕截图中看出:
启动实验室的 bash 命令有很多子进程,它们看起来都像我在整个使用时间内打开和关闭的内核(服务器运行了一个月,我打开和关闭了很多内核;在使用时没有一个运行)图片)。
由于每个进程都以 结束.json,我假设这些可能是一些仍然完整的运行时参数。第三层的所有进程看起来都与屏幕截图上的相同,没有其他任何东西。
无论如何,我不想解决内存溢出错误。我的问题很简单:
由于没有内核正在运行:我可以杀死第三层的所有进程并通过这样做释放内存吗?或者这可能会导致实验室崩溃?
不让实验室崩溃是至关重要的,因为我无法重新启动实验室。
我只是想知道何时理解像下面这样的算法的时间复杂度。
对于一个Python列表,如果我们有一个for循环迭代它,然后进行包含检查,那么时间复杂度是O(n^2)。
我知道两者都是 O(n) (或者我认为),所以将它们嵌套在一起会使其成为 O(n^2) 吗?
我想如果这个“列表”实际上是一个列表,那么下面代码的时间复杂度就是O(n^2)。但如果它是字典,则时间复杂度为 O(n),因为查找时间复杂度为 O(1)。那是对的吗?
感谢您提前提供任何帮助!
for element in list:
if x in list:
Run Code Online (Sandbox Code Playgroud) keras tokenizer 是否提供词干提取和词形还原等功能?如果是的话,那么它是如何完成的呢?需要直观的理解。另外,text_to_sequence这有什么作用?
目前我有一个运行和休眠 60 秒的程序。我得到了程序的 PID,然后运行“sudo gcore(进程的 PID)”。但是我在终端中收到消息“gcore:权限不足”。我不确定为什么会发生这种情况以及如何解决这个问题。
当我运行“info gcore”时,我看到格式是:
gcore [-s] [-v] [-b size] [-o path | -c pathformat] pid
使用上述格式,是否有人还可以举一个 gcore 命令的示例,该命令使用进程 ID 在正在运行的进程上生成核心转储并将该核心转储保存到特定文件路径?
注意:我还安装了 gcore 的 home-brew 版本,如另一篇堆栈溢出帖子中所述,但这没有帮助
I'm using pySpark in version 2.3 (cannot update to 2.4 in my current dev-System) and have the following questions concerning the foreachPartition.
First a little context: As far as I understood pySpark-UDFs force the Python-code to be executed outside the Java Virtual Machine (JVM) in a Python-instance, making it performance-costing.
Since I need to apply some Python-functions to my data and want to minimize overhead costs, I had the idea to at least load a handable bunch of …
语境
我有一个Parquet存储在 HDFS 中的表,有两个分区,每个分区仅生成一个文件。
parquet_table \
| year=2020 \
file_1.snappy.parquet
| year=2021 \
file_2.snappy.parquet
Run Code Online (Sandbox Code Playgroud)
我的计划是只获取最新的分区并对其进行处理。
parquet_table \
| year=2020 \
file_1.snappy.parquet
| year=2021 \
file_2.snappy.parquet
Run Code Online (Sandbox Code Playgroud)
这有效,我只检索所需的数据。当我写这篇文章时,pySpark我假设纯 Spark 将在某种程度上是模拟的。
问题
尽管我检索了正确的数据,Spark 仍然有两个分区连接到 DataFrame df:
df = spark.read.parquet("hdfs_path_to_table/parquet_table/year=2021/")
Run Code Online (Sandbox Code Playgroud)
当我计算分区内的内容时,我发现只有一个产生数据:
df.rdd.getNumPartitions()
# -> 2
Run Code Online (Sandbox Code Playgroud)
当然,我现在可以轻松地完成df.coalesce(1)并最终获得所需的结果。不管怎样,我想知道为什么会发生这种情况,实际上我宁愿不想合并,而是直接只检索分区。
问题
有什么解决方案让我的 DataFramedf只有相应的正确值吗.getNumPartitions()?因此,有没有办法加载单个parquet文件并在单个分区中生成该文件?
语境
可以说我有一个pandas-DataFrame像这样:
>>> data.head()
values atTime
date
2006-07-01 00:00:00+02:00 15.10 0000
2006-07-01 00:15:00+02:00 16.10 0015
2006-07-01 00:30:00+02:00 17.75 0030
2006-07-01 00:45:00+02:00 17.35 0045
2006-07-01 01:00:00+02:00 17.25 0100
Run Code Online (Sandbox Code Playgroud)
atTime表示用作索引的时间戳的小时和分钟。我想将atTime列转换为二进制矩阵(使其稀疏也是一种选择),它将在机器学习方法中用作名义特征。
所需的结果应类似于:
>>> data.head()
values 0000 0015 0030 0045 0000
date
2006-07-01 00:00:00+02:00 15.10 1 0 0 0 0
2006-07-01 00:15:00+02:00 16.10 0 1 0 0 0
2006-07-01 00:30:00+02:00 17.75 0 0 1 0 0
2006-07-01 00:45:00+02:00 17.35 0 0 0 1 0
2006-07-01 01:00:00+02:00 17.25 0 0 0 0 …Run Code Online (Sandbox Code Playgroud) 语境
我Docker按照此说明在我的上安装Ubuntu 18.04 LTS (Server),后来又Kubernetes通过 进行安装kubeadm。初始化 ( kubeadm init --pod-network-cidr=10.10.10.10/24) 并加入第二个节点(我开始时有一个双节点集群)后,我无法让我的coredns以及后来应用的Web UI(仪表板)真正进入状态Running。
作为 pod 网络,我尝试了Flannel ( kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml) 和Weave Net - 没有任何改变。即使经过数小时的等待,它仍然显示状态ContainerCreating :
问题
为什么容器创建没有按预期工作?其根本原因可能是什么?最重要的是:我该如何解决这个问题?
编辑
总结一下我的回答,原因如下:
cgroups代替systemdiptables正确配置kubeadm init因为法兰绒标准 yaml--pod-network-cidr需要10.244.0.0/16python ×7
keras ×3
pyspark ×3
apache-spark ×2
dataframe ×2
pandas ×2
coredump ×1
dictionary ×1
docker ×1
flannel ×1
gcore ×1
generator ×1
ipython ×1
jupyter ×1
jupyter-lab ×1
kubeadm ×1
kubernetes ×1
list ×1
max-size ×1
message ×1
nlp ×1
parquet ×1
pid ×1
privileges ×1
rpc ×1
stemming ×1
tensorflow ×1
tokenize ×1
weave ×1