小编san*_*ayr的帖子

用于工作流程的 Airflow 与 AWS Step Functions

我正在开发一个项目,该项目从 AWS S3 获取一组输入数据,对其进行预处理和分割,启动 10K 批处理容器以在 AWS Batch 上并行处理分割数据,对数据进行后聚合并推送它到 S3。

我已经从其他项目中获得了 Airflow + Batch 的软件模式,但还没有处理 10k 并行任务的缩放因子。Airflow 很好,因为我可以查看哪些任务失败并在调试后重试任务。但是在一个 Airflow EC2 实例上处理这么多任务似乎是一个障碍。另一种选择是让一项任务启动 10k 容器并从那里监控它。

我没有使用 Step Functions 的经验,但听说它是 AWS 的 Airflow。Step Functions + Batch 在线看起来有很多模式。Step Functions 似乎是检查我的用例的好方法吗?您对失败的工作/重试任务的能力是否与使用 Airflow 获得相同的见解?

airflow aws-step-functions

22
推荐指数
2
解决办法
9981
查看次数

Pyspark:在同一列上连接数据帧时参考不明确

我正在尝试加入两个数据框。

我创建了别名并根据这篇文章引用了它们:Spark Dataframe区分具有重复名称的列

但当它命中函数时,我仍然收到有关不明确列的错误fillna(),即使我没有引用有关RetailUnits 的任何内容。

alloc_ns = allocation_num_spots.alias('alloc_ns')
avails_ns = avails_num_spots.alias('avails_ns')
compare_num_avails_inv = avails_ns.join(
    alloc_ns, 
        (F.col('avails_ns.BreakDateTime') == F.col('alloc_ns.AllocationDateTime')) & 
        (F.col('avails_ns.RetailUnit') == F.col('alloc_ns.RetailUnit')), 
        how='left').fillna(
    {'allocs_sum': 0}).withColumn(
    'diff', F.col('avails_sum') - F.col('allocs_sum'))
Run Code Online (Sandbox Code Playgroud)

但我不断收到此错误:

"Reference 'RetailUnit' is ambiguous, could be: avails_ns.RetailUnit, alloc_ns.RetailUnit.;"
Traceback (most recent call last):
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/dataframe.py", line 1664, in fillna
    return DataFrame(self._jdf.na().fill(value), self.sql_ctx)
  File "/usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/usr/lib/spark/python/lib/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
    raise AnalysisException(s.split(': ', 1)[1], stackTrace)
pyspark.sql.utils.AnalysisException: "Reference …
Run Code Online (Sandbox Code Playgroud)

apache-spark-sql pyspark

8
推荐指数
2
解决办法
4万
查看次数

Python:如何获取文件路径的最后n个元素

假设我有这样的路径:

/folderA/folderB/folderC/item1
/folderA/folderB/folderX/item2
/folderA/folderB/folderF/item1
/folderA/folderB/folderQ/item5
Run Code Online (Sandbox Code Playgroud)

如何获取文件路径的最后两个元素?

folderC/item1
folderX/item2
folderF/item1
folderQ/item5
Run Code Online (Sandbox Code Playgroud)

我知道我可以 git 目录或文件

>>> os.path.basename('/folderA/folderB/folderC/item1')
>>> item1


>>> os.path.dirname('/folderA/folderB/folderC/item1')
>>> /folderA/folderB/folderC/
Run Code Online (Sandbox Code Playgroud)

python-3.x

6
推荐指数
2
解决办法
5280
查看次数

Pyspark:在数据框中用 null 替换所有出现的值

我有一个类似于下面的数据框。我最初用 -1 填充所有空值以在 Pyspark 中进行连接。

df = pd.DataFrame({'Number': ['1', '2', '-1', '-1'],
                   'Letter': ['A', '-1', 'B', 'A'],
                   'Value': [30, 30, 30, -1]})


pyspark_df = spark.createDataFrame(df)

+------+------+-----+
|Number|Letter|Value|
+------+------+-----+
|     1|     A|   30|
|     2|    -1|   30|
|    -1|     B|   30|
|    -1|     A|   -1|
+------+------+-----+
Run Code Online (Sandbox Code Playgroud)

处理完数据集后,我需要将所有 -1 替换回空值。

+------+------+-----+
|Number|Letter|Value|
+------+------+-----+
|     1|     A|   30|
|     2|  null|   30|
|  null|     B|   30|
|  null|     A| null|
+------+------+-----+
Run Code Online (Sandbox Code Playgroud)

什么是最简单的方法来做到这一点?

apache-spark apache-spark-sql pyspark pyspark-dataframes

5
推荐指数
2
解决办法
335
查看次数

Dockerfile:Python.h:没有这样的文件或目录

我有一个简单的 dockerfile,用于在 AWS 上运行容器,但在安装时遇到了问题s3fs,这很奇怪,因为我在之前的 dockerfile 中使用了此代码段,没有出现问题。

与分布有关吗?

错误:

multidict/_multidict.c:1:10: fatal error: Python.h: No such file or directory
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM amazonlinux:latest


RUN yum -y install which unzip aws-cli \
    && yum install -y python3-pip python3 python3-setuptools \
    && yum install -y tar.x86_64 \
    && DEBIAN_FRONTEND=noninteractive yum install -y ksh


RUN pip3 install boto3 \
    && yum install -y gcc \
    && pip3 install s3fs
Run Code Online (Sandbox Code Playgroud)

这是输出日志:

Installing collected packages: fsspec, docutils, botocore, typing-extensions, aioitertools, wrapt, attrs, chardet, multidict, async-timeout, idna, …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose

4
推荐指数
1
解决办法
2686
查看次数

Pandas:显示整行而不截断

我有一个 python 脚本,可以在使用 AWS SNS 失败时发送电子邮件。我遇到数据帧被截断的问题,并且我不确定如何显示整个线程。我尝试过使用 pandasset_option但似乎没有任何效果。

有没有办法打印出整个数据框并显示整行?

这是代码的一小段:

import pandas as pd
import boto3
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

session = boto3.Session()
sns = session.client('sns', region_name='us-east-1')

d = {'failed_runs':['296e62fb-1bc2-4e27-8d69-4a2267237698 - FAILED-GSN-INTO', '92b15078-1fcc-41f0-bc20-d933becf23bf - FAILED-ESP2-INTO', 'b04460ef-32a7-403a-8fbe-468effed7f2b - FAILED-HLN-INTO']}

df = pd.DataFrame(d)

response = sns.publish(TopicArn="arn:aws:sns:xxxxxxxxx",
                       Message="""
        Daily Digest for Failed Runs
        ------------------------------------------------------------------------------------

        {}

        ------------------------------------------------------------------------------------


        """.format(df))
Run Code Online (Sandbox Code Playgroud)

这给了我一封类似的电子邮件:

       Daily Digest for Failed Runs
       ------------------------------------------------------------------------------------

                                                  failed_runs
0   296e62fb-1bc2-4e27-8d69-4a2267237698 - FAILED-...
1   92b15078-1fcc-41f0-bc20-d933becf23bf - FAILED-...
2   b04460ef-32a7-403a-8fbe-468effed7f2b - FAILED-...
Run Code Online (Sandbox Code Playgroud)

python amazon-sns pandas

3
推荐指数
1
解决办法
9577
查看次数

Folium Choropleth Map - 有没有办法为 NaN 值添加交叉影线?

有没有办法将交叉影线(交叉线)指定为nan_fill_color?我正在创建一些灰度可视化,目前使用白色或黑色作为填充颜色并不能完全传达我想要的含义。

这是我的代码:

state_geo = 'us-states.json'
state_unemployment = 'myData.csv'
state_data = pd.read_csv(state_unemployment)

m = folium.Map(location=[39, -98], zoom_start=4)

folium.Choropleth(
    geo_data=state_geo,
    name='choropleth',
    data=state_data,
    columns=['State', 'unemployment'],
    key_on='feature.id',
    fill_color='Greys',
    fill_opacity=1,
    line_opacity=.1,
    line_weight = 2,
    nan_fill_color='Black',
    legend_name='Year'
).add_to(m)

folium.LayerControl().add_to(m)

m
Run Code Online (Sandbox Code Playgroud)

链接到 us-states.json 数据:

https://raw.githubusercontent.com/python-visualization/folium/master/examples/data/us-states.json

python data-visualization choropleth folium

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

Python:将日期格式 YYYY-mm-dd 转换为 dd-MON-yyyy(带缩写月份)

我有一个日期,它是以下格式的字符串:

'2021-01-16'
Run Code Online (Sandbox Code Playgroud)

并且需要将其转换为以下格式的字符串:

'16-JAN-2021'
Run Code Online (Sandbox Code Playgroud)

我能够像这样得到大部分内容:

x = datetime.strptime('2021-01-16', '%Y-%m-%d')
x.strftime('%d-%b-%Y')
Run Code Online (Sandbox Code Playgroud)

但月份并未完全大写:

'16-Jan-2021'
Run Code Online (Sandbox Code Playgroud)

python

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

Python:从与给定列表对应的字典中选择键、值

我有一个像这样的字典:

d = {'cat': 'one', 'dog': 'two', 'fish': 'three'}
Run Code Online (Sandbox Code Playgroud)

给定一个列表,我可以只保留给定的键值吗?

输入:

l = ['one', 'three']
Run Code Online (Sandbox Code Playgroud)

输出:

new_d = {'cat': 'one', 'fish': 'three'}
Run Code Online (Sandbox Code Playgroud)

python

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

蛋糕配方的 SQL 架构和成分列表

我是 PostgreSql 的新手,正在研究一个用于学习目的的示例数据库。我有一个面包店数据库和一个食谱表和一个配料表。我试图了解连接两个表的模式,以便配方表有一个引用成分表的成分列表,但我不确定我是否需要第三个表,或者我是否可以只使用这两个表.

CREATE TABLE ingredients
(
    ing_id            SERIAL       PRIMARY KEY,
    name              varchar(255) NOT NULL,
    quantity          integer      NOT NULL
);


CREATE TABLE recipes
(
    rec_id                        SERIAL       PRIMARY KEY,
    name                          varchar(120) NOT NULL,
    list_of_ingredients           text         NOT NULL,
);

Run Code Online (Sandbox Code Playgroud)

编辑:所以假设我在成分表中有这个:

(1, flour, 40)
(2, eggs, 12)
(3, sugar, 23)
Run Code Online (Sandbox Code Playgroud)

这在食谱表中:

(1, cake, "3 flour, 4 eggs, 2 sugar")
Run Code Online (Sandbox Code Playgroud)

我对如何链接这两个表有点困惑。


list_of_ingredients 需要引用成分表作为外键。我知道 NoSQL DB 的全部意义在于允许列表,所以我不确定我是否完全错误地处理了这个问题。

我还将编写一个 Make_Recipe 函数,该函数将接收一个配方并确保有足够的成分,如果通过上述条件,则继续并减少成分数量。

我已经通读了这些帖子,但它们不太符合要求: 用于存储食物食谱的 数据库设计食谱/成分/测量/数量的数据库架构

谢谢你的时间!任何帮助深表感谢。

sql postgresql

0
推荐指数
1
解决办法
685
查看次数