Image for post
Image for post

In python vi sono varie librerie per effettuare data analysis, una tra le più importanti è Pandas.
Pandas offre funzionalità simili a R, come ad esempio i DataFrame per la gestione dei dati in formato tabella.

Purtroppo Pandas è stata implementata per gestire solo piccole quantità di dati, quando la tabella (ad es. un file csv) supera la dimensione della memoria virtuale del sistema operativo (stesso ordine di grandezza della RAM dei nostri PC) Pandas smette di funzionare.

Infatti, quando la dimensione dei dati supera una certa soglia vengono usate tecnologie differenti, questo è il contesto che viene anche chiamato Big Data.
La tecnologia maggiormente usata nel contesto dei Big Data è Apache Spark.

Purtroppo Apache Spark è scritto in Java e Scala, il che significa che se un Data Scientist comincia la sua sperimentazione su piccoli campioni, usando ad esempio R o python, quando poi vuole passare gli stessi modelli su un campione più grande si ritrova obbligato a riscrivere il codice, infatti deve effettuare degli effort addizionali nel re-implementare gli stessi modelli usando Java o Scala. Questa operazione tipicamente coinvolge un team dove altri ruoli entrato in campo, ad esempio il Data Engineer.
Qui c’è da fare una parentesi, perché Spark offre anche delle interfacce da python e R, chiamate rispettivamente pyspark e sparklyr, ma purtroppo le politiche di rilascio delle nuove funzionalità in Spark prediligono le interfacce native in Java e Scala, lasciando un po’ indietro i corrispettivi in python e R, in altri termini, quando esce una nuova funzionalità in Spark, ad esempio quando viene rilasciata la versione 2.4, passa un po’ di tempo prima che le stesse funzionalità vengano rilasciate anche in python ed R.
In più, essendo il core di Spark eseguito sulla Java Virtual Machine, esiste un ritardo (overhead) dovuto al fatto che python o R effettuano la traduzione dei dati in memoria e li inviano a Java e viceversa, in altri termini, ogni linguaggio di programmazione ha un proprio modo in cui salva i dati in memoria, quando un linguaggio deve tradurre dati per inviarli ad un altro, chiaramente, effettua delle operazioni di trasformazione che portano ad un ritardo nella computazione. Questo problema è stato in parte risolto con Apache Arrow, un progetto che prevede di standardizzare il modo in cui i dati vengono salvati in memoria, in modo da permettere una più efficiente interoperabilità tra i linguaggi di programmazione. …


Contributing to open source projects is a rewarding experience. Even though the contribution regards a small amount of code, being aware that those few lines will be used by many users, many times, in the future, gives a really satisfying feeling.

The workflow was simple, I went on the issue tracker of the project, I selected a new feature to implement which I knew was not impossible to implement, then I manifested my intentions and I started working on it.

The challenging part of this work was prove its mathematical correctness.
I had the initial idea since the beginning, but writing its proof helped me out to improve the algorithm and to fix its corner cases. …


Today I’ve played a bit with Spark-NLP, the idea is to use it to extract relationships between Named Entities and their Part of Speech tags in a very scalable way.

First, I installed Spark NLP, Python 3 (Jupyter Notebook), and used Apache Spark 2.4.0.
I solved the problem of configuring it by specifying the JAVA_HOME bash variable:

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

Using python, I included all the required functions with:

import pyspark.sql.functions as F
from pyspark.ml import Pipeline
from pyspark.sql …

About

Antonio Ercole De Luca

Data Architect — Senior Software Developer http://eracle.me

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store