توفر المكونات المستندة إلى الحاوية المرونة لدمج التعليمات البرمجية المكتوبة بأي لغة في خط الأنابيب الخاص بك ، طالما يمكنك تنفيذ هذا الرمز في حاوية Docker.
إذا كنت جديدا على خطوط الأنابيب TFX، معرفة المزيد حول المفاهيم الأساسية لخطوط الأنابيب TFX .
إنشاء مكون قائم على الحاوية
المكونات المستندة إلى الحاوية مدعومة ببرامج سطر الأوامر المعبأة في حاويات. إذا كان لديك بالفعل صورة حاوية، يمكنك استخدام TFX إنشاء مكون منه باستخدام create_container_component
وظيفة لاعلان المدخلات والمخرجات. معلمات الوظيفة:
- الاسم: اسم المكون.
- المدخلات: A القاموس تعين أسماء المدخلات إلى أنواع. المخرجات: قاموس يعيّن أسماء المخرجات لأنواع المعلمات: قاموس يعيّن أسماء المعلمات إلى الأنواع.
- صورة: الحاويات اسم الصورة، واختياريا علامة صورة.
- الأوامر: الحاويات سطر الأوامر نقطة الدخول. لم يتم تنفيذه داخل قذيفة. يمكن أن يستخدم سطر الأوامر كائنات العناصر النائبة التي يتم استبدالها في وقت التحويل بإدخال أو إخراج أو معلمة. يمكن استيرادها الكائنات نائبا من
tfx.dsl.component.experimental.placeholders
. لاحظ أن قوالب Jinja غير مدعومة.
قيمة الإرجاع: فئة المكونات وراثة من base_component.BaseComponent التي يمكن مثيل والمستخدمة داخل خط أنابيب.
العناصر النائبة
لمكون التي لديها مدخلات أو مخرجات، و command
في كثير من الأحيان يحتاج إلى النائبة التي يتم استبدال مع البيانات الفعلية في وقت التشغيل. يتم توفير العديد من العناصر النائبة لهذا الغرض:
InputValuePlaceholder
: عنصر نائب لقيمة القطع الأثرية الإدخال. في وقت التشغيل ، يتم استبدال هذا العنصر النائب بتمثيل السلسلة لقيمة الأداة.InputUriPlaceholder
: عنصر نائب لURI من ذي الحجة إدخال قطعة أثرية. في وقت التشغيل ، يتم استبدال هذا العنصر النائب بـ URI لبيانات الأداة المدخلة.OutputUriPlaceholder
: عنصر نائب لURI من ذي الحجة إخراج قطعة أثرية. في وقت التشغيل ، يتم استبدال هذا العنصر النائب بـ URI حيث يجب أن يخزن المكون بيانات الأداة الناتجة.
معرفة المزيد عن TFX النائبة سطر الأوامر مكون .
مثال مكون قائم على الحاوية
فيما يلي مثال لمكون غير بيثون يقوم بتنزيل البيانات وتحويلها وتحميلها:
import tfx.v1 as tfx
grep_component = tfx.dsl.components.create_container_component(
name='FilterWithGrep',
inputs={
'text': tfx.standard_artifacts.ExternalArtifact,
},
outputs={
'filtered_text': tfx.standard_artifacts.ExternalArtifact,
},
parameters={
'pattern': str,
},
# The component code uses gsutil to upload the data to Google Cloud Storage, so the
# container image needs to have gsutil installed and configured.
image='google/cloud-sdk:278.0.0',
command=[
'sh', '-exc',
'''
pattern="$1"
text_uri="$3"/data # Adding suffix, because currently the URI are "directories". This will be fixed soon.
text_path=$(mktemp)
filtered_text_uri="$5"/data # Adding suffix, because currently the URI are "directories". This will be fixed soon.
filtered_text_path=$(mktemp)
# Getting data into the container
gsutil cp "$text_uri" "$text_path"
# Running the main code
grep "$pattern" "$text_path" >"$filtered_text_path"
# Getting data out of the container
gsutil cp "$filtered_text_path" "$filtered_text_uri"
''',
'--pattern', tfx.dsl.placeholders.InputValuePlaceholder('pattern'),
'--text', tfx.dsl.placeholders.InputUriPlaceholder('text'),
'--filtered-text', tfx.dsl.placeholders.OutputUriPlaceholder('filtered_text'),
],
)