Aplicacions Web

Les 45 preguntes principals d'entrevista d'Apache Spark

2 de gener de 2022

Entenem que donar una entrevista de vegades pot posar-te nerviós, sobretot quan has de donar una entrevista de feina de big data. Tots els candidats senten la necessitat de preparar-se abans d'anar a una feina de big data o de provocar una entrevista de treball amb un desenvolupador.

És difícil predir el tipus de preguntes que us faran a l'entrevista. Per tant, per ajudar-vos, hem elaborat una llista de les principals preguntes i respostes de l'entrevista d'Apache Spark que podeu preparar abans d'anar a l'entrevista de treball de desenvolupador d'espurna o de processament de big data. Fes una ullada a això article per a preguntes generals de l'entrevista.

Taula de continguts

Què és Apache Spark?

Abans de seguir endavant, primer entenem què és l'espurna apache. Espurna Apache és un marc de processament de dades flexible que és bastant fàcil d'utilitzar i permet als usuaris de professionals de big data executar la transmissió de manera eficient. Apache spark és un motor de plataforma de processament de dades ràpid i més general. Aquesta plataforma es va desenvolupar per a un càlcul ràpid i es va desenvolupar a la UC Berkeley l'any 2009. Amb l'ajuda d'apache-spark, podeu distribuir dades al sistema de fitxers a través del clúster i processar aquestes dades en paral·lel. A més, podeu escriure fàcilment una aplicació en Java, Python o Scala. Aquesta plataforma es va desenvolupar per superar les limitacions del paradigma de computació en clúster Map-Reduce, ja que l'espurna és capaç de mantenir les dades a la memòria. Tanmateix, MapReduce barreja les dades dins i fora del disc de memòria. A més, Spark admet consultes SQL, dades en streaming i processament de dades de gràfics. I el més important, apache-spark no s'executa a Hadoop, ja que s'executa per si sol utilitzant emmagatzematge com ara dades emmagatzemades a Cassandra, S3, des del qual la plataforma Spark pot escriure i llegir. Apache spark funciona 100 vegades més ràpid que Hadoop MapReduce.

Les principals preguntes i respostes de l'entrevista d'Apache Spark

Enumerem les principals preguntes i respostes de l'entrevista d'Apache Spark que podeu preparar abans d'anar a la vostra entrevista de treball de big data.

1. Quines són les característiques principals d'apache spark?

Les característiques principals d'apache spark són les següents:

  • Avaluació mandrosa: el concepte d'avaluació mandrosa s'utilitza per apache spark per retardar l'avaluació fins que esdevingui obligatòria.
  • Suport per a llenguatges de programació: podeu escriure el codi d'espurna en quatre llenguatges de programació com Java, Python, R i Scala. A més, la plataforma també ofereix API d'alt nivell en aquests llenguatges de programació. Spark proporciona shells en Python i Scala. Podeu accedir fàcilment als shells de Python i Scala mitjançant el directori ./bin/pyspark i el directori .bin/spark-shell, respectivament.
  • Aprenentatge automàtic: la funció d'aprenentatge automàtic d'Apache spark és útil per al processament de grans dades, ja que elimina la necessitat d'utilitzar motors separats per a l'aprenentatge i el processament automàtic.
  • Compatibilitat amb formats múltiples: l'espurna admet totes les vostres múltiples fonts de dades, com ara JSON, Hive i Parquet. A més, per accedir a dades estructurades mitjançant Spark SQL, obteniu mecanismes connectables que ofereix l'API de fonts de dades.
  • Velocitat: Apache spark funciona 100 vegades més ràpid que Hadoop MapReduce. Apache spark és capaç d'aconseguir aquesta velocitat mitjançant el porcionament controlat. Això vol dir que apache-spark gestiona les dades mitjançant la partició que ajuda encara més a paral·lelitzar el processament de dades distribuïts amb un trànsit mínim a la xarxa.
  • Integració Hadoop: Apache spark proporciona una connectivitat eficient amb Hadoop. A més, utilitzar spark és millor quan es tracta de Hadoop MapReduce.
  • Processament en temps real- Gràcies al càlcul de memòria d'apache-spark, el càlcul i processament en temps real i té una latència baixa.
Vegeu també Els iPhone poden tenir virus: com comprovar i eliminar virus

2. Quins són els avantatges d'apache spark respecte a Hadoop MapReduce?

Aquesta és una de les preguntes de l'entrevista apache spark que es poden fer en una entrevista. Els següents són els avantatges d'apache spark sobre Hadoop map-reduce.

  • Multitasca: Hadoop només admet el processament per lots mitjançant biblioteques integrades. D'altra banda, per realitzar diverses tasques, apache-spark inclou biblioteques integrades i les podeu utilitzar per al processament per lots, consultes SQL interactives, aprenentatge automàtic i streaming.
  • Velocitat millorada: quan utilitzeu apache-spark, haureu d'haver notat que la velocitat de processament de memòria de l'espurna és 100 vegades més ràpida que la de Hadoop map-reduce.
  • Sense dependència del disc: Hadoop MapReduce depèn dels discs i l'apache spark utilitza l'emmagatzematge i la memòria cau de dades de memòria integrada.

3. Quina és la funció d'un motor d'espurna?

Es pot utilitzar un motor d'espurna per distribuir, programar i supervisar l'aplicació de dades al clúster.

4. Què vols dir amb particions?

Partició significa una divisió més petita i lògica d'informació o dades. La partició és similar a la divisió a MapReduce. El particionament es pot definir com un procés per accelerar el processament de dades derivant unitats lògiques de dades. Totes les dades d'espurna són un RDD particionat.

5. Quin és el concepte de conjunts de dades distribuïts resilients? A més, indiqueu el mètode per crear un nou RDD a Apache Spark.

Una col·lecció de tolerància a errors o un grup d'elements operatius, que són capaços de funcionar en paral·lel, es coneix com a RDD (conjunts de dades distribuïts resilients). Per tant, si hi ha dades particionades en un RDD, llavors es distribueixen i són immutables.

Podem dir que els RDD són petites porcions de dades que es poden emmagatzemar a la memòria, que es distribueix en nombrosos nodes. A més, l'espurna utilitza una avaluació mandrosa i, per tant, els RDD s'avaluen de manera mandrosa, cosa que ajuda a spark a aconseguir una velocitat tremenda. Hi ha dos tipus de RDD.

  1. Conjunts de dades Hadoop: aquests tipus de RDD impliquen la realització de funcions en tots registre d'arxiu emmagatzemat en un sistema de fitxers distribuït d'Hadoop (HDFS) o en altres sistemes d'emmagatzematge.
  2. Col·leccions paral·lelisades: són RDD que funcionen paral·lelament entre si.

Ara, si parlem de crear un nou RDD a apache-spark, hi ha dues maneres.

  • Podeu crear un RDD paral·lelitzant una col·lecció al programa del controlador. Aquest mètode fa ús del mètode de paral·lelització de contextos d'espurna.
  • Mitjançant l'emmagatzematge extern carregant un conjunt de dades extern que inclou HBase, HDFS i un sistema de fitxers compartit.

6. Quines són les operacions suportades per RDD?

Les funcions suportades per RDD són transformacions i accions.

7. Què són les transformacions en espurna?

Les transformacions en spark signifiquen les funcions que s'apliquen als RDD, que donen lloc a un nou RDD. Tanmateix, les funcions no s'executen fins que no es produeixi una acció. Alguns exemples de transformacions són les funcions map() i filter (), on la funció map() es repeteix a totes les línies del RDD i es divideix per formar un nou RDD. D'altra banda, la funció filter() ajuda a crear un nou RDD escollint elements de l'espurna RDD actual.

8. Què entens per accions en espurna?

Les accions a spark signifiquen tornar les dades d'un RDD a una màquina local. Les accions a spark són bàsicament operacions RDD que donen valors que no són RDD. Alguns exemples d'accions són la funció reduce(), que és una acció que podeu implementar repetidament fins que quedi un valor. A continuació, hi ha l'acció take() que pren tots els valors d'un RDD i els porta al sistema de fitxers local.

9. Quines són les funcions del nucli d'espurna?

Algunes de les funcions del nucli d'espurna són les següents:

  • Seguiment de treballs
  • Proporciona tolerància a errors
  • Programació de treballs
  • Interacció amb sistemes d'emmagatzematge
  • Gestió de la memòria

10. Què entens per llinatge RDD?

El llinatge Spark RDD s'utilitza per reconstruir les dades perdudes, ja que l'Spark no admet la replicació de dades a la memòria. Per tant, el llinatge Spark RDD ajuda a reconstruir les particions de dades perdudes.

11. Què entens per conductor d'espurna?

El programa que s'executa al node mestre d'una màquina i declara les accions i transformacions en RDD de dades es coneix com el programa del controlador d'espurna. En altres paraules, un controlador d'espurna ajuda a crear un context d'espurna i a lliurar gràfics RDD al mestre, on s'executa el gestor de clúster autònom.

12. Definiu el terme flux d'espurna.

Una de les preguntes de l'entrevista d'espurna d'apache més fetes és definir el terme streaming d'espurna. Spark streaming és una extensió de l'API Spark que permet als usuaris transmetre fluxos de dades en directe. Les dades es processen a partir de diferents fonts de dades com flume, Kinesis i Kafka . Aquestes dades processades s'emmagatzemen després en sistemes de fitxers, taulers de control en directe i bases de dades. El processament de dades és similar al processament per lots quan es tracta de les dades d'entrada.

13. Quines són les funcions de MLlib a Apache Spark?

MLlib és una biblioteca d'aprenentatge automàtic proporcionada per l'espurna. MLlib té com a objectiu fer que l'aprenentatge automàtic sigui fàcil i escalable, ja que implica algorismes d'aprenentatge comuns, i utilitza casos com el gestor de clúster per a l'agrupació, el filtratge de regressió i la reducció dimensional.

14. Què entens per Spark SQL?

Spark SQL també es coneix com a tauró i és un mòdul nou que ajuda a realitzar el processament de dades estructurades. Spark pot realitzar consultes SQL sobre dades mitjançant aquest mòdul. A més, espurna SQL admet un RDD diferent anomenat SchemaRDD, que es compon d'objectes fila i objectes d'esquema que defineixen el tipus de dades en diferents columnes de cada fila.

15. Quines són les funcions de Spark SQL?

Les funcions de spark SQL són les següents:

  • Spark SQL pot carregar les dades de diverses fonts estructurades.
  • Spark SQL pot realitzar consultes de dades utilitzant les sentències SQL, tant en programes spark com a través d'eines externes connectades a spark SQL amb l'ajuda de connectors de base de dades estàndard, per exemple, utilitzant moltes eines de big data com un quadre.
  • Proporciona integració entre el codi normal de Python/Java/Scala i SQL.

16. Què vols dir amb YARN a Apache Spark?

Una altra pregunta habitual d'entrevista apache que es pot fer en una entrevista és definir YARN. Una de les característiques clau de spark és YARN, és similar a Hadoop i proporciona una plataforma de gestió de recursos que ofereix operacions escalables a tot el clúster. A més, si executeu l'apache spark a YARN, necessiteu una distribució binària de spark basada en el suport de YARN.

Vegeu també Com afegir una imatge de l'àlbum a MP3

17. Què entens per Spark Executor?

Quan connecteu el context spark al gestor de clúster, obté un executor als nodes del clúster. Els executors de Spark ajuden a executar càlculs i emmagatzemen les dades als nodes de treball. Les últimes funcions per context d'espurna es traslladen als executors per a la seva execució.

18. Esmenta els diferents tipus de gestors de clústers a spark?

Hi ha tres tipus de gestors de clúster que són compatibles amb el marc Spark.

  1. Autònom: és un gestor de clúster bàsic que ajuda a configurar un clúster.
  2. Apache Mesos: aquest és el gestor de clúster més utilitzat a l'aplicació Hadoop MapReduce i spark.
  3. YARN: aquest és un gestor de clúster que és responsable de la gestió de recursos a Hadoop.

19. Què vols dir amb la fitxa Parquet?

Un fitxer de format columnar es coneix com a fitxer parquet, que és compatible amb diversos altres sistemes de processament de dades. Amb l'ajuda del fitxer parquet, Spark SQL realitza les operacions de lectura i escriptura i considera que el fitxer parquet és el millor format d'anàlisi de dades fins ara.

20. És necessari instal·lar spark a tots els nodes del clúster YARN mentre executeu l'apache spark a YARN?

No cal instal·lar spark a tots els nodes del clúster YARN, ja que apache-spark s'executa a sobre de YARN.

21. Digues els components de l'ecosistema d'espurnes?

Els següents són els components de l'ecosistema d'espurnes.

  1. MLib: és la biblioteca d'aprenentatge automàtic per a l'aprenentatge automàtic.
  2. GraphX: serveix per implementar gràfics i càlculs en paral·lel de gràfics.
  3. Spark core: és el motor base, que s'utilitza per al processament de dades paral·lel i distribuït a gran escala.
  4. Spark streaming: Spark streaming ajuda en el processament en temps real de dades de streaming.
  5. Spark SQL: ajuda a integrar l'API de programació funcional de Spark juntament amb el processament racional.

22. Podeu utilitzar Apache Spark per analitzar i accedir a les dades emmagatzemades a la base de dades Cassandra?

L'ús de Spark per analitzar i accedir a les dades emmagatzemades a la base de dades Cassandra és possible mitjançant l'ús del connector Spark Cassandra. Heu de connectar la Cassandra al projecte d'espurna. Per tant, quan connecteu Cassandra amb apache-spark, us permet fer consultes molt més ràpidament reduint l'ús de la xarxa per enviar dades entre els nodes Cassandra i els executors d'espurna.

23. Definir el node de treball?

Un node de treball és un node que és capaç d'executar el codi en un clúster. Per tant, el programa controlador ha d'escoltar i acceptar el mateix dels executors per a les connexions entrants. A més, el programa controlador ha de ser adreçable a la xarxa des dels nodes de treball.

24. Quin és el procediment per connectar apache spark amb apache mesos?

El procediment per connectar Apache Spark amb Apache Mesos és el següent:

  1. El primer pas és mesos configurar el programa del controlador Spark per connectar-lo amb Apache mesos.
  2. Heu de col·locar el paquet binari Spark en una ubicació accessible per Apache mesos.
  3. Ara instal·leu apache-spark a la mateixa ubicació que apache mesos.
  4. Per indicar la ubicació on s'ha instal·lat l'apache spark, heu de configurar la propietat d'inici de l'executor de Spark Mesos.

25. Quines són les maneres de minimitzar les transferències de dades mentre treballeu amb Spark?

Per escriure programes d'espurna capaços d'executar-se ràpidament i fiables, és important minimitzar les transferències de dades. Aquestes són les maneres de minimitzar les transferències de dades mentre treballeu amb apache spark.

  • Utilitzeu acumuladors: per minimitzar les transferències de dades, podeu utilitzar acumuladors, ja que proporcionen una manera d'actualitzar els valors de les variables mentre executeu el mateix en paral·lel.
  • Evitar: podeu minimitzar les transferències de dades evitant la repartició, les operacions Bykey i altres operacions que s'encarreguen d'activar la barreja.
  • Utilitzeu variables de difusió: podeu millorar l'eficiència de les unions entre el RDD petit i gran utilitzant les variables de difusió.

26. Explica les variables de broadcast a apache-spark i quins són els seus usos?

Una de les preguntes d'entrevista d'apache spark més fetes és sobre les variables de difusió. Les variables de difusió d'apache spark són força útils, ja que en comptes d'enviar una còpia d'una variable amb tasques; una variable de difusió ajuda a mantenir una versió de només lectura a la memòria cau de la variable.

A més, cada node rep una còpia d'un conjunt de dades d'entrada gran, ja que és proporcionat per variables de difusió. Per reduir els costos de comunicació, apache-spark utilitza algorismes de difusió efectius per distribuir les variables de difusió.

Un altre ús de les variables de difusió és reduir la necessitat d'enviar les còpies d'una variable de cada tasca. Per millorar l'eficiència de la recuperació, les variables de difusió també ajuden a emmagatzemar una taula de cerca dins de la memòria en comparació amb RDD lookup().

27. Els punts de control els proporciona Apache Spark?

Els punts de control són proporcionats per apache spark. Els punts de control permeten que un programa s'executi les 24 hores del dia, els 7 dies de la setmana, i els fan resistents als errors. Per tal de recuperar RDD d'una fallada, s'utilitzen gràfics de llinatge.

A més, per afegir i gestionar els punts de control, apache-spark està equipat amb una API. D'aquesta manera, l'usuari pot decidir quines dades afegir al punt de control. A més, els punts de control es prefereixen més que els gràfics de llinatge, ja que els gràfics de llinatge tenen dependències més àmplies.

28. Esmenta els nivells de persistència a Apache Spark?

Hi ha diferents nivells de persistència en apache spark per emmagatzemar els RDD al disc, la memòria o una combinació de disc i memòria amb diferents nivells de replicació. A continuació es mostren els nivells de persistència a l'espurna:

  • Memòria i disc: la memòria i el disc emmagatzemen el RDD a la JVM com a objectes JAVA deserialitzats. En cas que el RDD no encaixi a la memòria, algunes parts del RDD s'emmagatzemen al disc.
  • Només disc: com el seu nom indica, només el nivell de persistència del disc només emmagatzema particions RDD al disc.
  • Ser només memòria: el RDD només emmagatzemat amb memòria juntament amb una matriu d'un byte per partició i com a objectes JAVA serialitzats.
  • Memòria i servidor de disc: aquest nivell de persistència és molt semblant al servidor només de memòria amb alguna diferència de particions emmagatzemades al disc quan no poden cabre en la memòria.
  • Només memòria: emmagatzema el RDD a la JVM com a objectes JAVA deserialitzats. En cas que el RDD no encaixi a la memòria, algunes parts del RDD no es guardaran a la memòria cau i s'hauran de tornar a calcular sobre la marxa.
  • Off heap: aquest nivell de persistència és similar a la memòria només ser, però emmagatzema les dades a la memòria fora de l'emmagatzematge.
Vegeu també 11 solucions perquè Recaptcha no funcioni a Chrome, Firefox o qualsevol navegador

29. Quines limitacions té l'ús d'apache spark?

Algunes de les limitacions de l'ús d'apache spark són les següents:

  • Apache spark no té un sistema de gestió de fitxers integrat. Per tant, cal integrar Spark amb altres plataformes com Hadoop per a un sistema de gestió de fitxers.
  • No hi ha suport per al procés de transmissió de dades en temps real. A apache-spark, el flux de dades en directe es divideix en lots i, fins i tot després del processament, es converteix en lots. Per tant, podem dir que la transmissió d'espurnes és un processament de micro-lots i no admet el processament de dades en temps real.
  • El nombre d'algoritmes disponibles a l'espurna és menor.
  • Els criteris de finestra basats en registres no admeten la transmissió d'espurnes.
  • No podeu executar-ho tot en un sol node i el treball s'ha de distribuir en diversos clústers.
  • Si utilitzeu l'espurna per al processament de grans dades rendible, la capacitat de memòria integrada esdevé un repte.

30. Indiqueu la manera d'activar neteges automatitzades a Apache Spark que no sigui 'spark.cleaner.ttl'?

Una altra manera de desencadenar neteges automatitzades a Spark és distribuir els treballs de llarga durada en diferents lots i escriure el resultat intermediari al disc.

31. Esmenta el paper d'Akka a l'espurna?

Akka fa el procés de programació a spark. Amb l'ajuda d'un procés de programació, els treballadors i superiors poden enviar o rebre missatges per a tasques.

32. Explica schemaRDD a apache spark RDD?

El RDD que transporta diversos objectes de fila, com ara embolcalls al voltant de la cadena normal o matrius d'enters amb la informació de l'esquema sobre el tipus de dades de cada columna, es coneix com ShemaRDD. Tanmateix, ara s'anomena DataFrame API.

33. Quin és el motiu pel qual es dissenya schemaRDD?

El motiu del disseny de SchemaRDD és ajudar els desenvolupadors en la depuració de codi i les proves d'unitat al mòdul central sparkSQL.

34. Quin és el procediment per eliminar els elements quan la clau està present en qualsevol altre RDD?

Podeu eliminar fàcilment els elements quan la clau està present en qualsevol altre RDD utilitzant la funció de resta ().

35. Indica la diferència entre persist() i cache()

Els usuaris poden especificar el nivell d'emmagatzematge amb l'ajuda de persist (), i d'altra banda, la memòria cau () utilitza el nivell d'emmagatzematge predeterminat.

36. Què entens per memòria de l'executor en una aplicació spark?

Per a un executor d'espurna, cada aplicació d'espurna té un nombre fix de mida de nucli i pila. La memòria de l'executor d'espurna, que controla la propietat spark.executor.memory del senyalador -executor-memory, s'anomena mida de l'emmagatzematge dinàmic.

Cada node de treball tindrà un executor a l'aplicació spark. L'aplicació utilitza una mica de memòria del node de treball i la memòria de l'executor ajuda a mesurar la quantitat de memòria que utilitza l'aplicació.

37. Quines són les maneres d'identificar que l'operació donada és una transformació o acció en un programa d'espurna?

Els usuaris poden identificar fàcilment que l'operació és una transformació o acció en funció del tipus de retorn.

  • Una operació és una transformació quan el tipus de retorn és el mateix que el RDD.
  • Una operació és una acció quan el tipus de retorn no és el mateix que RDD.

38. Quins creus que són els errors habituals que cometen els desenvolupadors d'espurnes?

Alguns dels errors comuns que cometen els desenvolupadors d'espurna són els següents:

  • Els desenvolupadors d'espurnes poden cometre alguns errors mentre gestionen els gràfics acíclics dirigits (DAG).
  • Els desenvolupadors d'espurnes també poden cometre alguns errors mentre mantenen la mida necessària per als blocs de barreja.

39. Esmenta algunes empreses que estan utilitzant Spark streaming?

Algunes de les empreses que utilitzen la transmissió d'espurna són les següents:

  • Uber
  • Netflix
  • Pinterest
  • Alibaba
  • Amazon

40. Podem utilitzar apache spark per a l'aprenentatge de reforç?

Apache spark no es prefereix per a l'aprenentatge de reforç, ja que només és adequat per a algorismes simples d'aprenentatge automàtic, com ara l'agrupació, la regressió i la classificació.

41. Com gestiona l'Spark la supervisió i el registre en mode autònom?

Apache spark utilitza una interfície d'usuari basada en web per supervisar el clúster en mode autònom, que mostra les estadístiques del clúster i de la feina. A més, el resultat del registre de cada treball s'escriu al directori de treball dels nodes esclaus.

42. Indiqueu el flux de treball comú d'un programa d'espurna.

El flux de treball comú d'un programa spark és el següent:

  1. El primer pas implicat en un programa d'espurna és crear RDD d'entrada a partir de les dades externes.
  2. Creació de nous RDD transformats basats en la lògica empresarial utilitzant diverses transformacions RDD com Filter().
  3. Persist() tots els RDD intermedis que poden haver de ser reutilitzats en el futur.
  4. Per iniciar el càlcul paral·lel, utilitzeu diverses accions RDD com ara first(), count(). Spark optimitzarà i executarà aquestes accions, així.

43. Quines diferències hi ha entre spark SQL i Hive?

A continuació es mostren les diferències entre spark SQL i Hive.

  • Si utilitzeu spark SQL, potser sabeu que és més ràpid que Hive.
  • Podeu executar a Rusc consulta en Spark SQL. Tanmateix, no podeu executar la consulta SQL a HIve.
  • Hive és un marc, mentre que Spark SQL és una biblioteca.
  • No és necessari per crear un metamagatzem en SQL. Tanmateix, és obligatori crear una metamagatzem a Hive.
  • Spark SQL pot inferir automàticament l'esquema, però a Hive, heu de fer-ho manualment, ja que l'esquema s'ha de declarar explícitament.

44. Què vols dir amb receptors en streaming d'espurnes?

Les entitats especials en streaming d'espurna es coneixen com a receptors, ja que consumeixen dades de diverses fonts de dades i les localitzen a l'apache spark. Els contextos de streaming creen els receptors, ja que les tasques de llarga durada estan programades per executar-se de manera circular, amb cada receptor obtenint un únic nucli.

45. Què vols dir amb una finestra corredissa en guspira? Explica amb un exemple.

S'utilitza una finestra lliscant a l'espurna per especificar cada lot de flux d'espurna, que s'ha de processar. Per exemple, amb l'ajuda d'una finestra lliscant, podeu establir els intervals de processament per lots i els lots específics es processaran en aquests intervals.

Conclusió

Esperem que hagis gaudit de les preguntes i respostes de l'entrevista d'apache spark esmentades anteriorment. Ara, podeu resoldre fàcilment totes les vostres preguntes d'entrevista de feina de big data. Reviseu totes les preguntes i respostes de l'entrevista d'apache spark per fer-vos una idea sobre el tipus de preguntes d'entrevista que es fan en una entrevista de treball de big data.