Nextflow 소개: 채널
El Channel es el medio por el que "hacemos llegar"datos a los processos.
Existen multiples formas de crear un canal. 알구노스 에젬플로스:
ch1 = Channel.create()
ch1 << 1
ch1 << 'hola'
ch2 = Channel.of( 1, 3, 5, 7 )
ch3 = Channel.fromPath( '/data/some/*.txt' )
ch4 = Channel.watchPath( '/path/*.fa' )
y el canal irá emitiendo los elementos disponibles según se vayan consumiendo (es decir, el canal es una cola no bloqueante que conecta consumidores)
정보
채널
value
에 존재하는 También siempre el mismo valor y que puede ser leído mútiples veces. 예를 들어 chn = Channel.value('hi')
crea un canal que siempre emitirá el stringhi
cuando se lea de él.운영자
Los canales disponen de un conjunto de operatores (extensibles, puedes añadir los tuyos mediante el mecanismo de plugins que hablaremos en otro post) que permiten modificar los valores emitidos por estos (por ejemplo, un canal emite todos los ficheros de un directorio pero queremos filtrar) por un criteria diferente al nombre)
Algunos de los operatores disponibles:
channel.of(1,2,3).filter{ it % 2 == 1 }.view()
예엠플로
Como caso "práctico"vamos a crear un pipeline que descargue un CSV del Ayuntamiento de Madrid, filtre algunos registros y los muestre
El csv en concreto es la relacion de crashes de trafico ocurridos durante el último año, donde se especifican, entre otros, el distrito y si hubo rastros de alcohol (campos 6 y 17receivivamente) y el tipo de crashe (campo 7)
La página del catálogo de datos
parsecsv.nf
workflow {
Channel.fromPath( "https://datos.madrid.es/egob/catalogo/300228-24-accidentes-trafico-detalle.csv" )
| splitCsv(sep:';')
| filter{ row ->
// distrito && alchohol
row[6] == 'MORATALAZ' && row[17] == 'S'
}
| map { row ->
// tipo
row[7]
}
| view
}
Si ejecutas este pipeline obtendras algo como:
nextflow run ./parsecsv.nf
N E X T F L O W ~ version 22.04.5
Launching `./parsecsv.nf` [shrivelled_meninsky] DSL2 - revision: 93c84a05a0
Atropello a persona
Vuelco
Colisión múltiple
Colisión múltiple
Choque contra obstáculo fijo
Vuelco
Choque contra obstáculo fijo
Choque contra obstáculo fijo
Colisión fronto-lateral
Alcance
Choque contra obstáculo fijo
Vuelco
Colisión fronto-lateral
Alcance
Choque contra obstáculo fijo
Vuelco
Choque contra obstáculo fijo
Choque contra obstáculo fijo
Choque contra obstáculo fijo
경고
la utilidad real de los canales, y en realidad de Nextflow, va mucho más allá de este ejemplo pero creo que estos pequeños
ejercicios nos sirven para ir aproximandonos al lenguaje e ir intuyendo su potencial
정보
Como puedes observar el DSL permite concatenar operatores mediante el uso del pipe "|"
Al ejecutar este pipeline, Nextflow creará un canal (anónimo) que emitirá un elemento
path
(Nextflow es capaz de manejar URLs comosi fueran ficheros locales, como en este caso)
Este
path
será consumido por el operator splitCSV
el cual a su ve emitirá las líneas del CSV parseadas como una listaCada línea será filtrada por la ejecución de una closure que devolverá
true
o false
para indicar si el elemento tiene que ser emitido o noEl operator
map
recibe una lista de elementos (por cada linea filtrada) y emite un sólo campo de esta listaPor último usamos un operator
view
que simplemente muestra por consola lo que lee por su canal결론
우리는 파이프라인을 통해 새로운 파이프라인을 만들 수 있습니다. Su naturaleza asíncrona y capacidad de paralelizar el envío de los mensajes nos ofrecen una potencia para realizar tareas complejas muy interesante.
Reference
이 문제에 관하여(Nextflow 소개: 채널), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jagedn/introduccion-a-nextflow-channels-2j7f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)