小编Xop*_*ter的帖子

使用 Ubuntu 20.04 和 Terraform 创建 Azure Linux VM

我正在尝试在西欧 Azure 区域使用 Terraform 创建一个 Linux VM,并使用 Ubuntu Server 20.04 LTS 映像。我可以在 Azure 门户中很好地完成此操作,但 Terraform 抱怨该图像不存在:

平台映像“Canonical:UbuntuServer:20.04-LTS:latest”不可用。

确实,az vm image list --location westeurope证实了这一点;18.04 LTS 存在,但没有 20.04 LTS。

我正在使用该azurerm_linux_virtual_machine资源,内容如下source_image_reference

source_image_reference {
  publisher = "Canonical"
  offer     = "UbuntuServer"
  sku       = "20.04-LTS"  # FIXME SKU doesn't exist in westeurope
  version   = "latest"
}
Run Code Online (Sandbox Code Playgroud)

我对此完全困惑!如何在 Terraform 中访问 Azure 市场中的图像?我已经看到plan需要该块的建议,但不知道(也没有找到任何文档)如何配置它。

azure azure-marketplace azure-virtual-machine terraform

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

了解JSONEncoder的子类化

我试图子类化json.JSONEncoder这样的命名元组(使用新的Python 3.6+语法定义,但它可能仍适用于输出collections.namedtuple)被序列化为JSON对象,其中元组字段对应于对象键.

例如:

from typing import NamedTuple

class MyModel(NamedTuple):
    foo:int
    bar:str = "Hello, World!"

a = MyModel(123)           # Expected JSON: {"foo": 123, "bar": "Hello, World!"}
b = MyModel(456, "xyzzy")  # Expected JSON: {"foo": 456, "bar": "xyzzy"}
Run Code Online (Sandbox Code Playgroud)

我的理解是我子类化json.JSONEncoder并覆盖它的default方法来为新类型提供序列化.然后,课程的其余部分将就递归等方面做正确的事情.因此我想出了以下内容:

class MyJSONEncoder(json.JSONEncoder):
    def default(self, o):
        to_encode = None

        if isinstance(o, tuple) and hasattr(o, "_asdict"):
            # Dictionary representation of a named tuple
            to_encode = o._asdict()

        if isinstance(o, datetime):
            # String representation of a datetime
            to_encode = …
Run Code Online (Sandbox Code Playgroud)

python json subclass namedtuple python-3.6

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

查询名称数据库的建议

我有一个Oracle数据库,像许多人一样,有一个包含传记信息的表.在其中,我想以"自然"的方式按名称搜索.

该表有forenamesurname字段,目前,我正在使用这样的东西:

select id, forename, surname
from   mytable
where  upper(forename) like '%JOHN%'
and    upper(surname) like '%SMITH%';
Run Code Online (Sandbox Code Playgroud)

这可行,但它可能非常慢,因为此表上的索引显然无法解释前面的通配符.此外,用户通常会根据他们通过电话告诉他们的内容来搜索人员 - 包括大量的非英文姓名 - 所以最好也进行一些语音分析.

因此,我一直在试验Oracle Text:

create index forenameFTX on mytable(forename) indextype is ctxsys.context;
create index surnameFTX on mytable(surname) indextype is ctxsys.context;

select   score(1)+score(2) relevance,
         id,
         forename,
         surname
from     mytable
where    contains(forename,'!%john%',1) > 0
and      contains(surname,'!%smith%',2) > 0
order by relevance desc;
Run Code Online (Sandbox Code Playgroud)

这具有使用Soundex算法以及全文索引的优点,因此它应该更有效.(虽然,我的轶事结果显示它很慢!)我对此的唯一担忧是:

  • 首先,需要以一些有意义的方式刷新文本索引.使用on commit速度太慢,可能会干扰前端软件(我无法控制)与数据库的交互方式; 所以需要一些思考......

  • Oracle返回的结果并不是非常自然地排序; 我不太确定这个score功能.例如,我的开发数据显示"乔纳森彼得杰森史密斯"在顶部 - 罚款 - 但"简玛格丽特辛普森"与"约翰特伦斯史密斯"处于同一水平

我认为删除前面的通配符可能会提高性能而不会降低结果,因为在现实生活中,您永远不会在名称中间搜索块.但是,否则,我对这些想法持开放态度......这种情况必须在恶心的情况下实施!任何人都可以建议一个更好的方法来处理我现在正在做/考虑的事情吗? …

sql oracle full-text-search soundex oracle-text

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

R中保留的CSV订单

我的数据顺序很重要.如果我将CSV加载到R中read.csv,那么数据帧中行的顺序是否保证与CSV 的顺序相匹配?

如果我将一堆CSV和rbind它们一起加载然后subset用来获取我感兴趣的数据怎么样?

例如:

1.csv

foo,bar
a,123
a,456
c,789
Run Code Online (Sandbox Code Playgroud)

2.csv

foo,bar
d,987
a,999
b,654
a,321
Run Code Online (Sandbox Code Playgroud)

请问以下内容:

data1<-read.csv("1.csv", header=T)
data2<-read.csv("2.csv", header=T)
all_data<-rbind(data1, data2)
filtered<-subset(all_data, foo=="a")
Run Code Online (Sandbox Code Playgroud)

... 总是产生一个filtered:

   foo  bar
1    a  123
2    a  456
3    a  999
4    a  321
Run Code Online (Sandbox Code Playgroud)

...并且此行为是否适用于任意CSV输入和过滤器?

csv r subset dataframe

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

安装时复制配置文件

我正在尝试打包我的 Python 项目,该项目带有一个配置点文件,我想在安装时将其复制到用户的主目录中。打包的快速指南说这可以使用data_files参数来完成setuptools.setup。所以这就是我所拥有的:

data_files = [(os.path.expanduser("~"), [".my_config"])]
Run Code Online (Sandbox Code Playgroud)

如果我使用python setup.py install,这似乎工作正常,但是当我将我的包上传到 PyPI 并运行时pip install,不会复制 dotfile。

FWIW,我已经把dotfile中MANIFEST.in,也尝试了包括package_data参数setup。这些步骤似乎没有任何区别。如果我pip install和闲逛的site-packages目录,就在源文件所在的位置。

我怎样才能实现我正在寻找的东西?

python pip setuptools

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

使用 AAD 令牌在 Databricks 中创建 Azure Key Vault 支持的秘密范围

我的最终目标是将 ADLS gen2 容器安装到我的 Databricks 工作区中,作为在 Azure 服务主体的支持下由 Terraform 管理的部署的一部分。这是一个单一部署,它创建所有 Azure 资源(网络、防火墙、存储帐户、Databricks 工作区等),然后使用 Databricks Terraform 提供程序配置 Databricks 工作区。

这个答案说我无法使用服务主体进行 AAD 直通安装,这意味着我必须使用 OAuth2 身份验证。为此,我需要 Databricks 中的 Azure Key Vault 支持的秘密范围。Terraform 文档说我只能通过基于用户的身份验证来做到这一点,而不能通过我的服务主体来做到这一点。

所以我想也许我可以实现一个 hack:在 Terraform 中创建一个 Databricks PAT(同样,始终作为服务主体),然后使用 Terraform 资源external“外壳”到 Databricks CLI,使用此 PAT 进行身份验证。我手动尝试了此操作并收到此错误:

{
  "error_code": "INVALID_PARAMETER_VALUE",
  "message": "Scope with Azure KeyVault must have userAADToken defined!"
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为 PAT 是为服务主体创建的。但是,作为替代方案,此答案建议使用 Azure AD 令牌身份验证,而不是 PAT。所以,我就从那个兔子洞里走下去!

我可以按照Microsoft 的文档获取 Azure AD 令牌,然后使用它对 Databricks CLI 进行身份验证:

export ARM_TENANT_ID="..." …
Run Code Online (Sandbox Code Playgroud)

azure azure-active-directory azure-keyvault azure-databricks databricks-cli

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

在给定时间间隔内找到最短二进制字符串

说我有两个值0 <= a < b <= 1,我怎么能选择的x,从而用最短的二进制扩张可能吗?a <= x<b

到目前为止,我的方法是取二进制字符串ab,并删除小数点,并在它们不同的第一个位置,采取a向上扩展直到那一点.如果还有更多a需要消耗,请删除最后一位.最后,添加1.

在JavaScript中:

var binaryInInterval = function(a, b) {
  if (a < 0 || b > 1 || a >= b) return undefined;

  var i, u, v, x = '';

  a = a.toString(2).replace('.', '');
  b = b.toString(2).replace('.', '');

  for (i = 0; i < Math.max(a.length, b.length); i++) {
    u = parseInt(a.substr(i, 1), 10) || 0; …
Run Code Online (Sandbox Code Playgroud)

javascript language-agnostic algorithm binary

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

线程垃圾收集

threading.Thread如果不再有任何对Python 的引用但它仍在运行,它会被垃圾收集吗?

# Start a thread with no reference
Thread(target=some_long_running_function).start()
# Do lots of other stuff
Run Code Online (Sandbox Code Playgroud)

python multithreading garbage-collection

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

使用 unittest.mock.patch 测试 aiohttp 客户端

我已经使用 aiohttp 编写了一个简单的 HTTP 客户端,我正在尝试通过修补aiohttp.ClientSessionaiohttp.ClientResponse. 但是,看起来unittest.mock.patch装饰器似乎不尊重我的异步代码。猜测,我会说这是某种命名空间不匹配。

这是一个最小的例子:

from aiohttp import ClientSession

async def is_ok(url:str) -> bool:
    async with ClientSession() as session:
        async with session.request("GET", url) as response:
            return (response.status == 200)
Run Code Online (Sandbox Code Playgroud)

我正在使用异步装饰器进行测试,如本答案中所述。所以这是我尝试的测试:

import unittest
from unittest.mock import MagicMock, patch

from aiohttp import ClientResponse

from my.original.module import is_ok

class TestClient(unittest.TestCase):
    @async_test
    @patch("my.original.module.ClientSession", spec=True)
    async def test_client(self, mock_client):
        mock_response = MagicMock(spec=ClientResponse)
        mock_response.status = 200

        async def _mock_request(*args, **kwargs):
            return mock_response

        mock_client.request = mock_response

        status …
Run Code Online (Sandbox Code Playgroud)

python testing patch python-asyncio aiohttp

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

用于自定义类型的内爆函数的PL/SQL

有没有办法在PL/SQL中创建一个implode例程,它将任何自定义数据类型作为参数并连接其成员,由一些指定的字符串分隔?

例如,假设我有以下类型:

CREATE TYPE myPerson AS OBJECT(
  forename VARCHAR2(50),
  surname  VARCHAR2(50),
  age      NUMBER
);
Run Code Online (Sandbox Code Playgroud)

然后,假设一个函数返回一个类型的对象myPerson,但我想将列连接在一起:

SELECT implode(getPerson(1234),'$$') from dual;
Run Code Online (Sandbox Code Playgroud)

返回(假设这个设计示例中的数据已设置):

John$$Doe$$55
Run Code Online (Sandbox Code Playgroud)

可以将分隔符指定为可选参数,但第一个参数的类型可以是任何(不一定myPerson).

oracle plsql sql-types concatenation object

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