我计算机上的代码运行正常,但是当我将其放入DAG中以通过Airflow运行时,它不起作用。我使用GCP和作曲家。其他任务在同一云存储上正常运行。作曲者拥有所需的所有权限。
def get_results():
import pandas as pandas
df = pandas.read_csv('gs://y/x.csv')
with models.DAG(
...) as dag:
search_simmilar = python_operator.PythonOperator(
task_id='search',
python_callable=get_results
)
气流日志中的错误:
File "pandas/_libs/parsers.pyx", line 695, in pandas._libs.parsers.TextReader._setup_parser_sourc
FileNotFoundError: File b'gs://y/x.csv' does not exis
答案 0 :(得分:1)
检查在作曲家中安装的pandas版本。 熊猫版本0.24.0添加了对通过gcsfs库读取/写入Google Cloud Storage的支持
注意:升级熊猫版本可能会破坏现有的操作员,因为这些挂钩将使用或依赖于较早的熊猫版本。 例如。由于对熊猫的依赖,BigQueryOperator将失败。 在这种情况下,您可以选择使用PythonVirtualenvOperator或KubernetesPodOperator,在其中可以安装依赖模块(如pandas> 0.24.0)而不会影响现有环境。
答案 1 :(得分:0)
我可以想到两种解决方法:
dags
文件一起放入DAG.py
文件夹中。 airflow.cfg
所示
DAGs folder
中查找一个级别来找到此文件/home/airflow/gcs/dags/<path>/<to>/<file>.csv
GoogleCloudStorageHook.download(bucket, object)
NamedTemporaryFile
答案 2 :(得分:0)
GCP作曲者使用Cloud Storage FUSE,它将您的作曲者dag文件夹映射到放置DAG的SELECT * from test_table order by name;
----|----
name|ord
----|----
a |1
a |2
b |3
c |4
d |5
存储桶(例如:Google cloud storage
)。
我建议您将dag之间共享的文件放在映射到gs://bucket-name/dags
的文件夹/home/airflow/gcs/data
中。在这里,您可以了解有关gs://bucket-name/dags
和Google cloud storage
的更多信息:https://cloud.google.com/composer/docs/concepts/cloud-storage
还有一个例子:
Composer
答案 3 :(得分:0)
创建一个变量,转到“仪表板”->“管理”->“变量”,使用gc存储桶创建一个新变量。例如,我用于密钥:gcs_bucket和用于val:gs:// your_unique_key
在dag文件导入中:
FILE *inf = fopen("data.bin", "rb");
if (inf) {
double data[N];
size_t n;
while ((n = fread(data, sizeof data[0], N, inf)) > 0) {
printf("Read %zu doubles, first one %g\n", n, data[0]);
}
fclose(inf);
}