{"id":1203,"date":"2019-11-02T15:17:51","date_gmt":"2019-11-02T14:17:51","guid":{"rendered":"http:\/\/wchmurze.cloud\/?p=1203"},"modified":"2019-11-13T21:08:17","modified_gmt":"2019-11-13T20:08:17","slug":"colab-zaiskrzyl-podczas-instalacji-apache-sparka","status":"publish","type":"post","link":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/","title":{"rendered":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka"},"content":{"rendered":"<p>Jednym z podstawowych problem\u00f3w m\u0142odego adepta sztuki torturowania danych i\u00a0 analizy du\u017cych zbior\u00f3w jest spory pr\u00f3g wej\u015bcia.\u00a0 Gdzie si\u0119 tego mo\u017cna nauczy\u0107 ?\u00a0 Jednym z bardziej znanych narz\u0119dzi jest Apache Spark. Okazuje si\u0119, \u017ce\u00a0 uruchomienie tego oprogramowania\u00a0 w us\u0142udze Google Colab jest banalne. Systemem operacyjnych z jakiego korzystamy jest Ubuntu 18.04. Oczywi\u015bcie taka konfiguracja nie umo\u017cliwi nam przetworzenia ogromnych ilo\u015bci danych, ale pozwoli na rozpoznanie narz\u0119dzi, podstawowych\u00a0 poj\u0119\u0107 i zbudowania nowych kompetencji.<\/p>\n<p>&nbsp;<\/p>\n<p>Po uruchomieniu notatnika\u00a0 w j\u0119zyku Python 3.<\/p>\n<p>W pierwszej kom\u00f3rce wklejamy<\/p>\n<pre lang=\"BASH\">!wget https:\/\/raw.githubusercontent.com\/djkormo\/colab-examples\/master\/spark\/install.bash -O install.bash\r\n<\/pre>\n<pre class=\"\">--2019-10-31 22:32:44--  <a href=\"https:\/\/raw.githubusercontent.com\/djkormo\/colab-examples\/master\/spark\/install.bash\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">https:\/\/raw.githubusercontent.com\/djkormo\/colab-examples\/master\/spark\/install.bash<\/a>\r\nResolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...\r\nConnecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: 382 [text\/plain]\r\nSaving to: \u2018install.bash\u2019\r\n\r\ninstall.bash        100%[===================&gt;]     382  --.-KB\/s    in 0s      \r\n\r\n2019-10-31 22:32:44 (59.8 MB\/s) - \u2018install.bash\u2019 saved [382\/382]<\/pre>\n<p>\u015aci\u0105gni\u0119ty w ten spos\u00f3b plik instalacyjny zawiera zaledwie kilka linii kodu<\/p>\n<pre class=\"\" lang=\"BASH\">!cat install.bash\r\n<\/pre>\n<pre class=\"\">#!\/bin\/bash\r\n\r\ncd \/\r\n\r\nmkdir -p content\r\n\r\ncd content\/ \r\n\r\napt-get install openjdk-8-jdk-headless\r\n\r\nwget http:\/\/apache.crihan.fr\/dist\/spark\/spark-2.4.4\/spark-2.4.4-bin-hadoop2.7.tgz -O spark-2.4.4-bin-hadoop2.7.tgz\r\n\r\ntar xf spark-2.4.4-bin-hadoop2.7.tgz\r\n\r\npip install -q findspark\r\npip install spark-nlp\r\n\r\nexport JAVA_HOME=\/usr\/lib\/jvm\/java-11-openjdk-amd64\r\nSPARK_HOME=\/content\/spark-2.4.4-bin-hadoop2.7\r\n\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Instalujemy JDK dla Javy 1.8, nast\u0119pnie \u015bci\u0105gamy z repozytorium Apache Sparka w postaci pliku .tgz, rozpakowujemy zawarto\u015b\u0107 i ustawiamy dwie zmienne \u015brodowiskowe.<\/p>\n<p>Uruchamiany skrypt instalacyjny<\/p>\n<pre class=\"\" lang=\"BASH\">!bash install.bash<\/pre>\n<p>Nadesz\u0142a pora na uruchomienie przyk\u0142adowego kawa\u0142ka kodu<\/p>\n<p>Najpierw uruchamiamy sesj\u0119 Sparka<\/p>\n<pre class=\"\" lang=\"PYTHON\">import os\r\nos.environ['JAVA_HOME'] = '\/usr\/lib\/jvm\/java-8-openjdk-amd64'\r\nos.environ['SPARK_ME'] = '\/content\/spark-2.4.4-bin-hadoop2.7'\r\nimport findspark\r\nfindspark.init(\"spark-2.4.4-bin-hadoop2.7\")\r\n\r\nfrom pyspark.sql import SparkSession\r\n\r\nspark = SparkSession \\\r\n    .builder \\\r\n    .appName(\"First App\") \\\r\n    .master(\"local[*]\")\\\r\n    .getOrCreate()\r\n\r\nprint(spark)\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">pyspark.sql.session.SparkSession object at 0x7fe1c00a5128<\/pre>\n<p>Potem uruchamiamy kontekst Sparka.<\/p>\n<pre lang=\"PYTHON\">from pyspark import SparkContext\r\nsc = SparkContext.getOrCreate()\r\nprint(sc)\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">SparkContext master=local[*] appName=First App<\/pre>\n<p>Musimy mie\u0107 \u015bwiadomo\u015b\u0107, \u017ce ka\u017cda zmiana kodu, instalacja danych, zastosowane algorytmy s\u0105 uruchamiane na klastrze obliczeniowym. Dost\u0119p do infrastruktury jest za pomoc\u0105 kontekstu Sparka. Patrz\u0105c z wysokiego poziomu, ka\u017cda aplikacja Sparka, sk\u0142ada si\u0119 z programu sterownika, kt\u00f3ry uruchamia na klastrze r\u00f3\u017cne r\u00f3wnoleg\u0142e procesy.Program sterownika ma\u00a0 dost\u0119p do Sparka przez obiektu kontekstowy (SparkContext). Maj\u0105\u0107 dost\u0119p do kontekstu mamy ju\u017c mo\u017cliwo\u015b\u0107 budowy obiekt\u00f3w zawieraj\u0105cych dane, kt\u00f3re pocz\u0105tkowo mog\u0105 si\u0119 nam wydawa\u0107 jako zwyk\u0142e i znane z Pythona struktury danych. Nic bardziej mylnego, obiekty znane jako\u00a0 Resilent Distributed Datasets (RDD) lub DataFrame (DF) s\u0105 umieszczane r\u00f3wnolegle na wielu w\u0119z\u0142ach zwanych\u00a0 wykonawcami (worker node).<\/p>\n<p>Na RDD b\u0119dziemy wykonywa\u0107 r\u00f3\u017cne metody, kt\u00f3re dzielimy na <em>transformacje<\/em> i <em>akcje<\/em>. Transformacje przekszta\u0142caj\u0105 nam RDD w inne RDD, za\u015b akcje generuj\u0105 z RDD wynik kt\u00f3ry mo\u017ce by\u0107 zwr\u00f3cony do sterownika b\u0105d\u017a zapisany w HDFS\u2019ie lub innym obs\u0142ugiwanym \u017ar\u00f3dle danych. Wszystkie transformacje s\u0105 leniwe (lazy), co oznacza , b\u0119d\u0105 wykonane wy\u0142\u0105cznie wtedy, gdy b\u0119dzie to konieczne. Zamiast manipulacji danymi mamy tu jedynie rejestracj\u0119 metadanych, kt\u00f3re pozwalaj\u0105 na zbudowanie RDD.<\/p>\n<pre class=\"\" lang=\"PYTHON\">from pyspark.sql import SQLContext\r\nurl = \"https:\/\/raw.githubusercontent.com\/guru99-edu\/R-Programming\/master\/adult_data.csv\"\r\nfrom pyspark import SparkFiles\r\nsc.addFile(url)\r\nsqlContext = SQLContext(sc)\r\nprint(sqlContext)\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">pyspark.sql.context.SQLContext object at 0x7fe1cf605438<\/pre>\n<p>Wczytajmy nasz plik jaka ramk\u0119 danych (dataframe)<\/p>\n<pre lang=\"PYTHON\">df = sqlContext.read.csv(SparkFiles.get(\"adult_data.csv\"), header=True, inferSchema= True)\t\r\n<\/pre>\n<p>Sprawd\u017amy jaka jest struktura tych danych.<\/p>\n<pre lang=\"PYTHON\">df.printSchema()\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre>root\r\n |-- x: integer (nullable = true)\r\n |-- age: integer (nullable = true)\r\n |-- workclass: string (nullable = true)\r\n |-- fnlwgt: integer (nullable = true)\r\n |-- education: string (nullable = true)\r\n |-- educational-num: integer (nullable = true)\r\n |-- marital-status: string (nullable = true)\r\n |-- occupation: string (nullable = true)\r\n |-- relationship: string (nullable = true)\r\n |-- race: string (nullable = true)\r\n |-- gender: string (nullable = true)\r\n |-- capital-gain: integer (nullable = true)\r\n |-- capital-loss: integer (nullable = true)\r\n |-- hours-per-week: integer (nullable = true)\r\n |-- native-country: string (nullable = true)\r\n |-- income: string (nullable = true)\r\n<\/pre>\n<p>Zr\u00f3bmy kilka przyk\u0142ad\u00f3w z zastosowanie RDD.<\/p>\n<p>Utw\u00f3rzmy pierwszy obiekt RDD o nazwie rdd-1, do kt\u00f3rego za\u0142adowali\u015bmy list\u0119 sk\u0142adaj\u0105c\u0105 si\u0119 z 10 cyfr. To prosty obiekt, ale na jego podstawie poka\u017c\u0119 podstawowe transformacje i akcje.\u00a0 Utworzenie obiektu z danych wewn\u0119trznych (nie z plik\u00f3w) umo\u017cliwia nam funkcja <strong>parallelize<\/strong>.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_1=sc.parallelize([0,1,2,3,4,5,6,7,8,9])\r\nprint(rdd_1)\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">ParallelCollectionRDD[0] at parallelize at PythonRDD.scala:195<\/pre>\n<p>Pierwsz\u0105 transformacj\u0119, kt\u00f3r\u0105 mo\u017cna zrobi\u0107 jest <strong>map<\/strong>.<\/p>\n<p>Map bierze ka\u017cdy element zbioru RDD jako element wej\u015bciowy przekszta\u0142ca go za pomoc\u0105 funkcji w element wyj\u015bciowy. W poni\u017cszym przyk\u0142adzie przemno\u017cyli\u015bmy elementy przez liczb\u0119 dwa. Dla os\u00f3b, kt\u00f3re nie znaj\u0105 sk\u0142adni lambda, mamy tu do czynienia z budow\u0105 funkcji kt\u00f3ra przekszta\u0142ca element wej\u015bciowy na element wej\u015bciowy. Nie wiemy jaki jest typ elementu wej\u015bciowego, nie musi to by\u0107\u00a0 typ skalarny. Nie ma potrzeby budowania tego w postaci def + cia\u0142o funkcji. Sk\u0142adnia wygl\u0105da w uproszczeniu tak <strong>lambda wejscie: wyjscie,<\/strong> gdzie wyj\u015bcie zawiera algorytm.\u00a0 My\u015bl\u0119, ze po kilku poni\u017cszych przyk\u0142adach stanie si\u0119 to bardziej czytelne.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_2=rdd_1.map(lambda x: x*2)\r\nprint(rdd_2)<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">PythonRDD[1] at RDD at PythonRDD.scala:53<\/pre>\n<p>Wykonajmy akcj\u0119 <strong>collect<\/strong> na obu zbiorach, dzi\u0119ki czemu b\u0119dzie mo\u017cna zobaczy\u0107 ich zawarto\u015b\u0107. Uwaga, nie nale\u017cy stosowa\u0107 tej akcji na bardzo du\u017cych zbiorach danych, gdy\u017c mog\u0105 si\u0119 one nie zmie\u015bci\u0107 w lokalnej pami\u0119ci. Akcje powinny by\u0107 wykonywane tylko kiedy s\u0105 konieczne (!).<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_1.collect()\r\nrdd_2.collect()\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\r\n[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]\r\n<\/pre>\n<p>Nast\u0119pn\u0105 transformacj\u0119, z kt\u00f3rej mo\u017cemy skorzysta\u0107 jest <strong>flatMap<\/strong>.<\/p>\n<p>Funkcja\u00a0 dla ka\u017cdego elementu na wej\u015bciu zwraca kolekcj\u0119 element\u00f3w, w tym przypadku rozk\u0142adamy ka\u017cdy z napis\u00f3w na wyrazy przyjmuj\u0105\u0107 spacj\u0119 jako separator.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_lines = sc.parallelize([\"Pan Tadeusz\",\"Pan Samochodzik i Templariusze\", \"Poznajemy Sparka\", \"Dwadzie\u015bcia tysi\u0119cy mil podmorskiej \u017ceglugi\"])\r\nrdd_words = rdd_lines.flatMap(lambda line: line.split(\" \"))\r\nprint(rdd_words.collect())\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">['Pan', 'Tadeusz', 'Pan', 'Samochodzik', 'i', 'Templariusze', 'Poznajemy', 'Sparka', 'Dwadzie\u015bcia', 'tysi\u0119cy', 'mil', 'podmorskiej', '\u017ceglugi']<\/pre>\n<p>Kolejn\u0105 transformacj\u0105 jest operacja filtrowania <strong>filter<\/strong>, kt\u00f3ra tworzy podzbi\u00f3r spe\u0142niaj\u0105cy warunki funkcji lambda zwrac\u0105cej tylko warto\u015bci logiczne. W naszym przypadku wymagamy, by element by\u0142 mniejszy od sze\u015bciu<\/p>\n<pre lang=\"PYTHON\">rdd_numbers=sc.parallelize([0,1,2,3,4,5,6,7,8,9])\r\nrdd_numbers_filtered=rdd_numbers.filter(lambda x:&lt;6)\r\nprint(rdd_numbers_filtered.collect())\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">[0, 1, 2, 3, 4, 5]\r\n<\/pre>\n<p>Kolejna transformacja o nazwie <strong>distinct<\/strong> umo\u017cliwia usuni\u0119cie zduplikowanych warto\u015bci w zbiorze.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_nonunique = sc.parallelize([1,2,2,3,4,4,5,6,7,8,8,9,9,9])\r\nrdd_unique = rdd_nonunique.distinct()\r\nprint(rdd_unique.collect())\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">[2, 4, 6, 8, 1, 3, 5, 7, 9]\r\n<\/pre>\n<p>Jak wyda\u0107 podw\u00f3jne liczby dwa, cztery, osiem i potr\u00f3jna dziewi\u0119\u0107 zosta\u0142y zredukowane do jednego wyst\u0105pienia..<\/p>\n<p>Istnieje mo\u017cliwo\u015b\u0107 utworzenia mniejszego zbioru danych za pomoc\u0105 transformacji <strong>sample<\/strong>, kt\u00f3ra przyjmuje trzy argumenty<\/p>\n<p>(czy zast\u0119powa\u0107, u\u0142amek liczby element\u00f3w w zbiorze wyj\u015bciowym\/wej\u015bciowym, ziarno dla generatora liczb pseudolosowych)<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([0,1,2,3,4,5,6,7,8,9])\r\nrdd_samples = rdd_numbers.sample(False, 0.5,123)\r\nprint(rdd_samples.collect())\r\n<\/pre>\n<p>Na wyj\u015bciu.<\/p>\n<pre class=\"\">[1, 2, 3, 4, 6, 7]\r\n<\/pre>\n<p>Ustawienie ziarna na 123 oznacza, \u017ce z tego samego zbioru wej\u015bciowego zostanie wylosowany za ka\u017cdym razem taki sam zbi\u00f3r wyj\u015bciowy. Nale\u017cy o tym pami\u0119ta\u0107.<\/p>\n<p>&nbsp;<\/p>\n<p>Wszystkie powy\u017csze przyk\u0142ady dotyczy\u0142y jednego zbioru RDD.<\/p>\n<p>Utw\u00f3rzmy dwa zbiory rdd_1 i\u00a0 rdd_2. Elementy w nich mog\u0105 si\u0119 pokrywa\u0107. Transformacja <strong>union<\/strong> umo\u017cliwia utworzenie nowego obiektu zawieraj\u0105cego ich sum\u0119.<\/p>\n<p>Sk\u0142adnia wygl\u0105da nast\u0119puj\u0105co\u00a0 rdd_wy_wyjsciu=<strong>rdd_pierwsze.union(rdd_drugie)<\/strong><\/p>\n<pre class=\"\">rdd_1 = sc.parallelize([1,2,3,4,5])\r\nrdd_2 = sc.parallelize([4,5,6,7,9])\r\nunion = rdd_1.union(rdd_2)\r\nprint(union.collect())<\/pre>\n<p>W posobny spos\u00f3b mo\u017cna skorzysta\u0107 z operacji <strong>intersetion<\/strong> (cz\u0119\u015b\u0107 wsp\u00f3lna), <strong>substract<\/strong> (r\u00f3\u017cnica, czyli elementy, kt\u00f3re s\u0105 w pierwszym obiekcie, a nie ma ich w drugim), <strong>cartesian<\/strong> (iloczyn kartezja\u0144ski). Sk\u0142adnia polece\u0144 jest analogiczna jak dla <strong>union<\/strong>.<\/p>\n<pre class=\"\">intersection = rdd_1.intersection(rdd_2)\r\nprint(\"intersection:\",intersection.collect())\r\nsubtract = rdd_1.subtract(rdd_2)\r\nprint(\"subtract:\",subtract.collect())\r\ncartesian = rdd_1.cartesian(rdd_2)\r\nprint(\"cartesian:\",cartesian.collect())<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">intersection: [4, 5]\r\nsubtract: [1, 2, 3]\r\ncartesian: [(1, 4), (1, 5), (2, 4), (2, 5), (1, 6), (1, 7), (2, 6), (2, 7), (1, 9), (2, 9), (3, 4), (3, 5), (4, 4), (4, 5), (5, 4), (5, 5), (3, 6), (3, 7), (4, 6), (4, 7), (3, 9), (4, 9), (5, 6), (5, 7), (5, 9)\r\n<\/pre>\n<p>Nadesz\u0142a pora na prezentacj\u0119 kilku akcji.<\/p>\n<p>Akcja <strong>reduce<\/strong> umo\u017cliwia zamian\u0119 wielu element\u00f3w zbioru na jeden. W naszym przyk\u0142adzie\u00a0 jest to mno\u017cenie<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([1,2,3,4,5,6,7,8,9])\r\nrdd_multis = rdd_numbers.reduce(lambda x, y: x * y)\r\nprint(rdd_multis)\r\nprint(type(rdd_multis))\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre>362880\r\n&lt;class 'int'&gt;\r\n<\/pre>\n<p>Istnieje te\u017c mo\u017cliwo\u015b\u0107 prostego przemno\u017cenia przez sta\u0142\u0105 warto\u015b\u0107. Umo\u017cliwia to operacja <strong>fold<\/strong>, kt\u00f3rej pierwszym elementem jest warto\u015b\u0107 przez kt\u00f3r\u0105 b\u0119dzie przemno\u017cony wynik.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([1,2,3,4,5])\r\nrdd_zero = rdd_numbers.fold(0, lambda x, y: x * y)\r\nprint(rdd_zero)\r\nprint(type(rdd_zero))\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">0\r\n&lt;class 'int'&gt;\r\n<\/pre>\n<p>Ten sam kod, ale zamiast zera zastosowali\u015bmy warto\u015b\u0107 minus jeden.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([1,2,3,4,5])\r\nrdd_minus = rdd_numbers.fold(-1, lambda x, y: x * y)\r\nprint(rdd_minus)\r\nprint(type(rdd_minus))\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">-120\r\n&lt;class 'int'&gt;\r\n<\/pre>\n<p>Na koniec zostawi\u0119 dwie akcje <strong>count<\/strong> oraz <strong>take<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>Akcja <strong>count<\/strong> zwraca liczb\u0119 element\u00f3w danego obiektu RDD.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])\r\nrdd_numbers.count()\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">20\r\n<\/pre>\n<p>Akcja <strong>take<\/strong> zwraca pierwszych x element\u00f3w z obiektu RDD. W naszym przypadku\u00a0 jest to liczba dziesi\u0119\u0107.<\/p>\n<pre class=\"\" lang=\"PYTHON\">rdd_numbers = sc.parallelize([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])\r\nrdd_numbers.take(10)\r\n<\/pre>\n<p>Na wyj\u015bciu:<\/p>\n<pre class=\"\">[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Pokaza\u0142em jedynie kilka przyk\u0142ad\u00f3w wykorzystuj\u0105cych stos technologiczny Apache Sparka. \u015arodowisko Colab mo\u017cna wykorzysta\u0107 jednak jeszcze efektywniej korzystaj\u0105c z SSH i VNC. Wtedy istnieje mo\u017cliwo\u015b\u0107 uruchamiania gotowych skrypt\u00f3w i kontroli przy wykorzystaniu Spark GUI i\u00a0 prosty podgl\u0105d obiekt\u00f3w<\/p>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li><a href=\"https:\/\/jaceklaskowski.gitbooks.io\/mastering-apache-spark\/spark-webui-jobs.html\">Jobs<\/a><\/li>\n<li><a href=\"https:\/\/jaceklaskowski.gitbooks.io\/mastering-apache-spark\/spark-webui-stages.html\">Stages<\/a><\/li>\n<li><a href=\"https:\/\/jaceklaskowski.gitbooks.io\/mastering-apache-spark\/spark-webui-storage.html\">Storage<\/a><\/li>\n<li><a href=\"https:\/\/jaceklaskowski.gitbooks.io\/mastering-apache-spark\/spark-webui-environment.html\">Environment<\/a><\/li>\n<li><a href=\"https:\/\/jaceklaskowski.gitbooks.io\/mastering-apache-spark\/spark-webui-executors.html\">Executors<\/a><\/li>\n<\/ol>\n<\/div>\n<p>&nbsp;<\/p>\n<p>O tym b\u0119dzie kolejny wpis, gdzie spr\u00f3bujemy przeanalizowa\u0107 prac\u0119 nad du\u017cym zbiorem.<\/p>\n<p>&nbsp;<\/p>\n<p>Przyk\u0142ady umie\u015bci\u0142em w repozytorium w postaci pliku .ipynb<\/p>\n<p><a href=\"https:\/\/github.com\/djkormo\/colab-examples\/blob\/master\/spark\/Colab_apache_spark_intro_primer.ipynb\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/djkormo\/colab-examples\/blob\/master\/spark\/Colab_apache_spark_intro_primer.ipynb<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Literatura:<\/p>\n<p>&nbsp;<\/p>\n<div class=\"entry-content-asset videofit\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"DEBIanCiAi\"><p><a href=\"https:\/\/computingforgeeks.com\/how-to-install-apache-spark-on-ubuntu-debian\/\">Install Apache Spark on Ubuntu 19.04\/18.04 &#038; Debian 10\/9\/8<\/a><\/p><\/blockquote>\n<p><iframe title=\"&#8220;Install Apache Spark on Ubuntu 19.04\/18.04 &#038; Debian 10\/9\/8&#8221; &#8212; Computing for Geeks\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" src=\"https:\/\/computingforgeeks.com\/how-to-install-apache-spark-on-ubuntu-debian\/embed\/#?secret=DEBIanCiAi\" data-secret=\"DEBIanCiAi\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/div>\n<p><a href=\"https:\/\/towardsdatascience.com\/how-to-use-pyspark-on-your-computer-9c7180075617\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/towardsdatascience.com\/how-to-use-pyspark-on-your-computer-9c7180075617<\/a><\/p>\n<p><a href=\"https:\/\/www.tutorialspoint.com\/pyspark\/pyspark_sparkcontext.htm\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.tutorialspoint.com\/pyspark\/pyspark_sparkcontext.htm<\/a><\/p>\n<p>https:\/\/runawayhorse001.github.io\/LearningApacheSpark\/pyspark.pdf<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jednym z podstawowych problem\u00f3w m\u0142odego adepta sztuki torturowania danych i\u00a0 analizy du\u017cych zbior\u00f3w jest spory pr\u00f3g wej\u015bcia.\u00a0 Gdzie si\u0119 tego mo\u017cna nauczy\u0107 ?\u00a0 Jednym z bardziej znanych narz\u0119dzi jest Apache Spark. Okazuje si\u0119, \u017ce\u00a0 uruchomienie tego oprogramowania\u00a0 w us\u0142udze Google &hellip; <a href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\">Continued<\/a><\/p>\n","protected":false},"author":1,"featured_media":1075,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11,9,4,8,6,10],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"og:description\" content=\"Jednym z podstawowych problem\u00f3w m\u0142odego adepta sztuki torturowania danych i\u00a0 analizy du\u017cych zbior\u00f3w jest spory pr\u00f3g wej\u015bcia.\u00a0 Gdzie si\u0119 tego mo\u017cna nauczy\u0107 ?\u00a0 Jednym z bardziej znanych narz\u0119dzi jest Apache Spark. Okazuje si\u0119, \u017ce\u00a0 uruchomienie tego oprogramowania\u00a0 w us\u0142udze Google &hellip; Continued\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\" \/>\n<meta property=\"og:site_name\" content=\"W chmurze o chmurze i nie tylko\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-02T14:17:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-13T20:08:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2017\/11\/largest-open-source-apache-spark.png\" \/>\n\t<meta property=\"og:image:width\" content=\"684\" \/>\n\t<meta property=\"og:image:height\" content=\"509\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"djkormo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"djkormo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\"},\"author\":{\"name\":\"djkormo\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"headline\":\"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka\",\"datePublished\":\"2019-11-02T14:17:51+00:00\",\"dateModified\":\"2019-11-13T20:08:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\"},\"wordCount\":1144,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"articleSection\":[\"Apache\",\"Big Data\",\"chmura\",\"migawka\",\"Python\",\"Spark\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\",\"url\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\",\"name\":\"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko\",\"isPartOf\":{\"@id\":\"https:\/\/wchmurze.cloud\/#website\"},\"datePublished\":\"2019-11-02T14:17:51+00:00\",\"dateModified\":\"2019-11-13T20:08:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/wchmurze.cloud\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wchmurze.cloud\/#website\",\"url\":\"https:\/\/wchmurze.cloud\/\",\"name\":\"W chmurze o chmurze i nie tylko\",\"description\":\"W chmurze o chmurze i nie tylko\",\"publisher\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wchmurze.cloud\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323\",\"name\":\"djkormo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g\",\"caption\":\"djkormo\"},\"logo\":{\"@id\":\"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/","og_locale":"pl_PL","og_type":"article","og_title":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko","og_description":"Jednym z podstawowych problem\u00f3w m\u0142odego adepta sztuki torturowania danych i\u00a0 analizy du\u017cych zbior\u00f3w jest spory pr\u00f3g wej\u015bcia.\u00a0 Gdzie si\u0119 tego mo\u017cna nauczy\u0107 ?\u00a0 Jednym z bardziej znanych narz\u0119dzi jest Apache Spark. Okazuje si\u0119, \u017ce\u00a0 uruchomienie tego oprogramowania\u00a0 w us\u0142udze Google &hellip; Continued","og_url":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/","og_site_name":"W chmurze o chmurze i nie tylko","article_published_time":"2019-11-02T14:17:51+00:00","article_modified_time":"2019-11-13T20:08:17+00:00","og_image":[{"width":684,"height":509,"url":"https:\/\/wchmurze.cloud\/wp-content\/uploads\/2017\/11\/largest-open-source-apache-spark.png","type":"image\/png"}],"author":"djkormo","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"djkormo","Szacowany czas czytania":"9 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#article","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/"},"author":{"name":"djkormo","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"headline":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka","datePublished":"2019-11-02T14:17:51+00:00","dateModified":"2019-11-13T20:08:17+00:00","mainEntityOfPage":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/"},"wordCount":1144,"commentCount":2,"publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"articleSection":["Apache","Big Data","chmura","migawka","Python","Spark"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/","url":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/","name":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka - W chmurze o chmurze i nie tylko","isPartOf":{"@id":"https:\/\/wchmurze.cloud\/#website"},"datePublished":"2019-11-02T14:17:51+00:00","dateModified":"2019-11-13T20:08:17+00:00","breadcrumb":{"@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wchmurze.cloud\/index.php\/2019\/11\/02\/colab-zaiskrzyl-podczas-instalacji-apache-sparka\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/wchmurze.cloud\/"},{"@type":"ListItem","position":2,"name":"Colab zaiskrzy\u0142 podczas instalacji Apache Sparka"}]},{"@type":"WebSite","@id":"https:\/\/wchmurze.cloud\/#website","url":"https:\/\/wchmurze.cloud\/","name":"W chmurze o chmurze i nie tylko","description":"W chmurze o chmurze i nie tylko","publisher":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wchmurze.cloud\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":["Person","Organization"],"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/9832cc6f86f99f541d983d2b8d60f323","name":"djkormo","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/14a901b808871fa98086ae259c45d646?s=96&d=mm&r=g","caption":"djkormo"},"logo":{"@id":"https:\/\/wchmurze.cloud\/#\/schema\/person\/image\/"},"url":"https:\/\/wchmurze.cloud\/index.php\/author\/djkormo\/"}]}},"_links":{"self":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1203"}],"collection":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/comments?post=1203"}],"version-history":[{"count":19,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1203\/revisions"}],"predecessor-version":[{"id":1255,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/posts\/1203\/revisions\/1255"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media\/1075"}],"wp:attachment":[{"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/media?parent=1203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/categories?post=1203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wchmurze.cloud\/index.php\/wp-json\/wp\/v2\/tags?post=1203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}