我在仪表板上有一些面板(大约 6 个)来显示数据点图表,对 PostgreSQL 数据库的 dockerised 实例进行查询。
直到最近,面板工作正常,有些停止工作并报告如下错误:
pq:无法将共享内存段“/PostgreSQL.2058389254”调整为 12615680 字节:设备上没有剩余空间
知道这是为什么吗?如何解决这个问题。Docker 容器运行在通过ssh
.
编辑
磁盘空间:
$df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 197G 140G 48G 75% /
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 4.0K 1.4G 1% /dev/shm
tmpfs 1.4G 138M 1.3G 10% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/dm-16 10G 49M 10G 1% /var/lib/docker/devicemapper/mnt/a0f3c5ab84aa06d5b2db00c4324dd6bf7141500ff4c83e23e9aba7c7268bcad4
/dev/dm-1 10G 526M 9.5G 6% /var/lib/docker/devicemapper/mnt/8623a774d736ed3dc0d2db89b7d07cae85c3d1bcafc245180eec4ffd738f93a5
shm 64M 0 64M 0% /var/lib/docker/containers/260552ebcdf2bf0961329108d3d975110f8ada0a41325f5e7dd81b8ddad9d18b/mounts/shm
/dev/dm-4 10G 266M 9.8G 3% /var/lib/docker/devicemapper/mnt/6f873e62607e7cac4c4b658c72874c787b90290f74d1159eca81af61cb467cfb …
Run Code Online (Sandbox Code Playgroud) 我可以确认 psycopg2 已安装(使用conda install -c anaconda psycopg2
),但似乎 psycopg2 无法导入到我的 python 脚本中,或者解释器无法找到它。我也尝试使用 pip3 安装,满足要求,这意味着 psycopg2 已经安装,但无法理解为什么我的脚本无法导入它。使用 Mac (OS v10.14.4)
$ python create_tables.py
Traceback (most recent call last):
File "create_tables.py", line 1, in <module>
import psycopg2
ModuleNotFoundError: No module named 'psycopg2'
$ pip3 install psycopg2
Requirement already satisfied: psycopg2 in /usr/local/lib/python3.7/site-packages (2.8.2)
$ pip3 install psycopg2-binary
Requirement already satisfied: psycopg2-binary in /usr/local/lib/python3.7/site-packages (2.8.2)
python -V
Python 3.7.0
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
编辑: create_table.py
import psycopg2
from config import config
def create_tables():
""" create …
Run Code Online (Sandbox Code Playgroud) 我正在使用包含多个表的 postgres 数据库。目标是从获得的查询结果中检索格式化的 JSON。我创建了这个 python 脚本,从表(测试用例)中获取数据集,以便操作查询结果:
\n\nimport psycopg2\nimport json\nfrom time import sleep\nfrom config import config\n\ndef main():\n conn = None\n try:\n params = config()\n conn = psycopg2.connect(**params)\n cur = conn.cursor()\n cur.execute("select * from location")\n row = cur.fetchone()\n\n while row is not None:\n print(row)\n #do field rename, merge(log, lat) and obtained JSON here\n sleep(0.3)\n row = cur.fetchone()\n\n cur.close()\n except (Exception, psycopg2.DatabaseError) as error:\n print(error)\n finally:\n if conn is not None:\n conn.close()\n\nif __name__ == \'__main__\':\n main()\n
Run Code Online (Sandbox Code Playgroud)\n\n为了使我的问题更清楚,我在这里制作了一个简化的场景,用 3 个表格来表示手头的任务,如下所示。
\n\nenvironment\n\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 …
Run Code Online (Sandbox Code Playgroud) 我正在使用 dockerized grafana 来创建历史数据的仪表板。我在 grafana 图表面板中看不到散点图选项。
我想使用散点图来显示时间间隔范围内的数据点。我同样希望能够获取/显示选定间隔(例如 30 分钟、60 分钟等)的数据点数量。
假设我有以下数组数组:
Input = np.array([[[[17.63, 0. , -0.71, 29.03],
[17.63, -0.09, 0.71, 56.12],
[ 0.17, 1.24, -2.04, 18.49],
[ 1.41, -0.8 , 0.51, 11.85],
[ 0.61, -0.29, 0.15, 36.75]]],
[[[ 0.32, -0.14, 0.39, 24.52],
[ 0.18, 0.25, -0.38, 18.08],
[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0.43, 0. , 0.3 , 0. ]]],
[[[ 0.75, -0.38, 0.65, 19.51],
[ 0.37, 0.27, 0.52, 24.27],
[ 0. , 0. , 0. …
Run Code Online (Sandbox Code Playgroud) 我不知道该怎么做,但我相信这是可行的。我有三个dataframes
具有相同列定义但来自不同年份的数据集。然后,我想对数字列进行配对,逐个列并绘制来自这些df
s的数据,适当地标记数据来自的集合。目标是了解按年份比较的每一列的数据模式。
我用这两个来说明我的意思,dataframes
其中数据集分别df1
来自年份2018
和df2
年份2019
:
df1
id speed accelaration jerk mode
0 1 1.94 -1.01 1.05 foot
1 1 0.93 0.04 -0.17 foot
2 3 0.50 -0.16 0.05 bike
3 3 0.57 0.05 0.19 bike
4 5 3.25 -0.13 -0.09 bus
5 5 0.50 -0.25 0.25 bus
6 5 0.25 0.10 0.25 bus
df2
id speed accelaration jerk mode
0 17 1.5 0.00 0.00 foot
1 17 1.5 0.00 …
Run Code Online (Sandbox Code Playgroud) 我创建了这个函数,它接受 adataframe
以返回ndarrays
输入和标签。
def transform_to_array(dataframe, chunk_size=100):
grouped = dataframe.groupby('id')
# initialize accumulators
X, y = np.zeros([0, 1, chunk_size, 4]), np.zeros([0,]) # original inpt shape: [0, 1, chunk_size, 4]
# loop over each group (df[df.id==1] and df[df.id==2])
for _, group in grouped:
inputs = group.loc[:, 'A':'D'].values
label = group.loc[:, 'label'].values[0]
# calculate number of splits
N = (len(inputs)-1) // chunk_size
if N > 0:
inputs = np.array_split(
inputs, [chunk_size + (chunk_size*i) for i in range(N)])
else:
inputs = …
Run Code Online (Sandbox Code Playgroud) 如何有效地将 numpy 数组数组转换为数组列表?最终,我想让 pandas 系列数组成为数据框中的列。如果有更好的办法可以直接到达,那也很好。
以下可重现的代码解决了list()
或 的问题.tolist()
,但在我的实际数据集上实现都太慢。我正在寻找更快的东西。
import numpy as np
import pandas as pd
a = np.array([np.array([0,1,2,3]), np.array([4,5,6,7])])
s = pd.Series(a.tolist())
s = pd.Series(list(a))
Run Code Online (Sandbox Code Playgroud)
这导致形状从a.shape = (2,4)
到s.values.shape = (2,)
。
我想postgres
从 default调整容器的共享内存大小64M
。所以我补充说:
build:
context: .
shm_size: '2gb'
Run Code Online (Sandbox Code Playgroud)
我正在使用 3.6 版的撰写文件postgres
服务定义。
version: "3.6"
services:
#other services go here..
postgres:
restart: always
image: postgres:10
hostname: postgres
container_name: fiware-postgres
expose:
- "5432"
ports:
- "5432:5432"
networks:
- default
environment:
- "POSTGRES_PASSWORD=password"
- "POSTGRES_USER=postgres"
- "POSTGRES_DB=postgres"
volumes:
- ./postgres-data:/var/lib/postgresql/data
build:
context: .
shm_size: '2gb'
Run Code Online (Sandbox Code Playgroud)
但是,这种变化不会生效,即使我重新启动该服务docker-compose down
,然后up
。所以我立即开始与 postgres 交互以在仪表板上显示一些数据,我遇到了共享内存问题。
在仪表板吃午饭之前:
$docker exec -it fiware-postgres df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-253:1-107615-1541c55e4c3d5e03a7716d5418eea4c520b6556a6fd179c6ab769afd0ce64d9f 10G …
Run Code Online (Sandbox Code Playgroud) 使用docker-compose
. 我想添加Plotly插件,所以我添加到我的 grafana 容器服务定义中,因此:
grafana:
restart: always
image: grafana/grafana
container_name: fiware-grafana
depends_on:
- postgres
ports:
- "3000:3000"
environment:
- plugins="crate-datasource,grafana-clock-panel,grafana-worldmap-panel,natel-plotly-panel"
volumes:
- ./grafana:/var/lib/grafana:rw
Run Code Online (Sandbox Code Playgroud)
但是,当我通过浏览器从 grafana 吃午餐时,我没有发现这个插件可用(见下图)。我在 grafana 服务中添加了 plotly 后删除了 grafana 图像并下载了新的图像,没有变化。
如何通过 docker-compose 将此插件添加到 Grafana?
编辑:
docker-compose 文件修改:
grafana:
restart: always
image: grafana/grafana
container_name: fiware-grafana
depends_on:
- postgres
ports:
- "3000:3000"
environment:
- GF_INSTALL_PLUGINS="crate-datasource,grafana-clock-panel,grafana-worldmap-panel,natel-plotly-panel"
volumes:
- ./grafana:/var/lib/grafana:rw
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------
fiware-cygnus /cygnus-entrypoint.sh Up (healthy) 0.0.0.0:5050->5050/tcp, 0.0.0.0:5080->5080/tcp
fiware-elasticsearch /docker-entrypoint.sh elas ... …
Run Code Online (Sandbox Code Playgroud) 我有这个df
:
df = pd.DataFrame(
{'loss': [0.044, 0.044, 0.038, 0.037, 0.036],
'code': ["('ac',)", "('ac', 'be')", "('ab', 'ac', 'be')",
"('ab', 'ac', 'be', 'fi')", "('ab', 'ac', 'be', 'de', 'fi')"]}
)
df
loss code
0 0.044 ('ac',)
1 0.044 ('ac', 'be')
2 0.038 ('ab', 'ac', 'be')
3 0.037 ('ab', 'ac', 'be', 'fi')
4 0.036 ('ab', 'ac', 'be', 'de', 'fi')
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个新列added-code
,在该列中引入新值code
。
预期成绩:
loss code added-code
0 0.044 ('ac',) ac
1 0.044 ('ac', 'be') be
2 0.038 ('ab', 'ac', 'be') …
Run Code Online (Sandbox Code Playgroud) import numpy as np
from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister
from qiskit import execute
Run Code Online (Sandbox Code Playgroud)
当尝试上面的代码时,我收到以下错误:
ModuleNotFoundError Traceback(最近一次调用最后一次) in () 1 import numpy as np ----> 2 from qiskit import QuantumCircuit, ClassicalRegister, QuantumRegister 3 from qiskit importexecute
ModuleNotFoundError:没有名为“qiskit”的模块