我有以下代码:
def extract_table_date(bucket_path: str) -> str:
event_date = re.search(r"date=([^/]+)", bucket_path)
return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)
mypy 在最后一行抛出错误:
“Optional[Match[str]]”的“None”项没有属性“group”
我想我可以通过为 分配一个类型来解决这个问题event_date,我可以:
from typing import Match
def extract_table_date(bucket_path: str) -> str:
event_date: Match = re.search(r"date=([^/]+)", bucket_path)
return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)
但 mypy 现在在函数的第一行抛出另一个错误:
赋值中的类型不兼容(表达式的类型为“Optional[Match[Any]]”,变量的类型为“Match[Any]”)
我真的不知道如何通知 mypy 结果不是可选的,但尽管如此,我还是遵循了可选类型和 None 类型的建议,添加了断言:
from typing import Match
def extract_table_date(bucket_path: str) -> str:
assert bucket_path is not None
event_date: Match = re.search(r"date=([^/]+)", bucket_path)
return event_date.group(1)[0:10].replace("-", "")
Run Code Online (Sandbox Code Playgroud)
但 mypy 仍然引发相同的错误。
我尝试通过更改定义的类型来修复event_date:
from typing import Match, …Run Code Online (Sandbox Code Playgroud) 我收到一条错误消息,但不知道如何继续,错误消息显示在下面。我已经下载了它运行所需的所有工具,但密钥似乎有问题。我已经正确输入了它们,但是为了保持我的帐户的私密性,我已隐藏帐户用户名和密码。提前致谢
C:\Users\User\Downloads\real-time-intrinio-python-master\real-time-intrinio-python-master> python realtime.py AAPL
Using Ticker: AAPL
Traceback (most recent call last):
File "realtime.py", line 18, in <module>
r=requests.get(auth_url, headers={"Authorization": "Basic %s" % base64.b64encode(os.environ['myUsername'] + ":" + os.environ['myPassword'])})
File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\os.py", line 669, in __getitem__
raise KeyError(key) from None
KeyError: 'myUsername'
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,第 18 行是“r=requests.get(auth_url, headers...”
import websocket
import _thread
import time
import requests
import base64
import json
import sys
import os
from requests.auth import HTTPBasicAuth
try:
print ("Using Ticker: " + str(sys.argv[1]))
except:
print ("Please include ticker as first argument") …Run Code Online (Sandbox Code Playgroud) 我有一个清单:
dates = [2017, 2018, 2018, 2018, 2019, 2019, 2019, 2020, 2020, 2020]
Run Code Online (Sandbox Code Playgroud)
我尝试将其添加到的数据帧长度相同(没有问题)。
我试过:
df = df.withColumn("YEARS", dates)
Error: Column needs to be col
Run Code Online (Sandbox Code Playgroud)
我也试过:
df = df.withColumn("YEARS", f.lit(dates))
Run Code Online (Sandbox Code Playgroud)
但这也行不通。
我看到了这个问题:如何在 Spark DataFrame 中添加一个常量列?
但是对于这种情况没有任何用处。
更新:预期结果是:
df_columns... | dates_from_list
---------------------------------
original_df_data| 2017
original_df_data| 2018
original_df_data| 2018
original_df_data| 2018
original_df_data| 2019
original_df_data| 2019
original_df_data| 2019
original_df_data| 2020
original_df_data| 2020
original_df_data| 2020
Run Code Online (Sandbox Code Playgroud) Secrets Manager我在 Account-1 中有一个秘密键值对us-east-1。此秘密使用客户管理的 KMS 密钥进行加密 - 我们称之为KMS-Account-1。所有这些都是通过控制台创建的。
现在我们转向CDK. 我们已经将cdk.pipelines.CodePipeline其部署Lambda到多个阶段/环境 - 所以从第一个到{ Account-2, us-east-1 }然后到{ Account-3, eu-west-1 }等等。这已经完成了。
us-east-1 SecretsManager上述所有阶段/环境中的 lambda 代码现在都需要更改为通过客户端获取Account-1 中存在的秘密键值对secretsmanager。该代码可能应如下所示 ( python):
client = boto3.session.Session().client(
service_name = 'secretsmanager',
region_name = 'us-east-1'
)
resp = client.get_secret_value(
SecretId='arn:aws:secretsmanager:us-east-1:<ACCOUNT-1>:secret:name/of/the/secret'
)
secret = json.loads(resp['SecretString'])
Run Code Online (Sandbox Code Playgroud)
各个帐户和区域(即环境)中的所有 lambda 表达式都将具有与上述完全相同的代码,因为需要从us-east-1.
cdk代码以促进这一点?代码管道中的代码部署如何获得导入此自定义kms密钥的权限,并SecretManager' secret通过 cdk 管道创建的 lambda 为跨帐户访问应用正确的权限?有人可以指点一下吗?
aws-lambda amazon-kms aws-codepipeline aws-secrets-manager aws-cdk
python ×3
amazon-kms ×1
apache-spark ×1
aws-cdk ×1
aws-lambda ×1
keyerror ×1
mypy ×1
pyspark ×1