** Schnell mit Funken ** Ich habe es in meinem Ohr gefangen und versucht, es einmal zu bewegen.
Ich habe es mit Homebrew wie folgt eingeführt.
brew install apache-spark
Ich habe Postleitzahldaten im CSV-Format von der folgenden Website erhalten. zipcloud
Verschieben Sie es in den folgenden Apache-Spark-Ordner, da es mit Homebrew installiert wurde.
cd /usr/local/Cellar/apache-spark/1.5.2/bin/
Anscheinend unterstützt Spark Scala, Java, Python, R, aber ich wollte Python verwenden
pyspark
Beginnen mit. Wenn Sie die Markierung "Funken" sehen, ist dies in Ordnung.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 1.5.2
/_/
Using Python version 2.7.11 (default, Dec 26 2015 17:47:53)
SparkContext available as sc, HiveContext available as sqlContext.
>>>
Bundesweit gibt es rund 120.000 Postleitzahldaten. Vor der Implementierung habe ich die Daten 88 Mal kopiert, unter der Annahme, dass eine große Datenmenge verarbeitet wird, und sie auf etwa 12 Millionen verdoppelt, um eine neue CSV-Datei zu erstellen. Und
sparkSample.py
# -*- coding: utf-8 -*-
import time
from pyspark import SparkContext
def main():
#Kanji, das Sie suchen möchten
queryList = ["Hirsch","Vogel","Bär","Affe","Hund"]
#Start der Zeitmessung
start = time.time()
#Datensatz
sc = SparkContext('local', 'Simple App')
logData = sc.textFile('KEN_ALL_OVER_TEN_MILLION.CSV')
#Extrahieren Sie Informationen für jede Abfrage
for item in queryList:
#Liste mit Split
lines = logData.map(lambda x: x.split(','))
#Extrahieren Sie diejenigen, deren Postleitzahl 7 enthält.
numberPicks = lines.filter(lambda s: unicode('7', 'utf-8') in s[2])
#Extrahieren Sie die Namen von Städten und Dörfern, die das Ziel-Kanji enthalten
namePicks = lines.filter(lambda s: unicode(item, 'utf-8') in s[7])
#In Liste speichern
desList = namePicks.collect()
#Protokollausgabe
for line in desList:
s = u""
for i, unit in enumerate(line):
if i != 0:
s = s + u', '
s = s + unit
print s.encode('utf-8')
#Hit Count-Ausgabe
outlog = "query:" + item.decode('utf-8') + u", count:" + \
unicode(str(len(desList)), 'utf-8') + ", Time:{0}".format(time.time() - start) + u"[sec]"
print outlog.encode('utf-8')
#Stopp der Zeitmessung
finish_time = time.time() - start
print u"Time[total]:{0}".format(finish_time) + u"[sec]"
#Verarbeitung beenden
sc.stop()
if __name__ == '__main__':
main()
Bei der Auswertung habe ich auch den Code geschrieben, wenn kein Funke verwendet wird.
plain.py
# -*- coding: utf-8 -*-
import time
def pickAnimal(recordList, qList, start):
#Extrahieren Sie Informationen für jede Abfrage
for q in qList:
count = 0
for record in recordList:
sepRecord = record.split(",")
if len(sepRecord) == 15:
#Extrahieren Sie diejenigen, deren Postleitzahl 7 enthält.
#Extrahieren Sie die Namen von Städten und Dörfern, die das Ziel-Kanji enthalten
if -1 < sepRecord[2].find("7") and -1 < sepRecord[7].find(q):
count = count + 1
#Protokollausgabe
print record
#Hit Count-Ausgabe
print "query:" + q + ", count:" + str(count) + ", Time:{0}".format(time.time() - start) + "[sec]"
def main():
sepRecordList = []
#Kanji, das Sie suchen möchten
queryList = ["Hirsch","Vogel","Bär","Affe","Hund"]
#Datensatz
srcpath = "KEN_ALL_OVER_TEN_MILLION.CSV"
srcIN = open(srcpath, 'r')
#Start der Zeitmessung
start = time.time()
for line in srcIN:
sepRecordList.append(line)
pickAnimal(sepRecordList, queryList, start)
#Stopp der Zeitmessung
finish_time = time.time() - start
print "Time:{0}".format(finish_time) + "[sec]"
#Verarbeitung beenden
srcIN.close()
if __name__ == '__main__':
main()
$pyspark sparkSample.py
~(Unterlassung)~
Time[total]:645.52906394[sec]
$python plain.py
~(Unterlassung)~
Time:112.966698885[sec]
Hmm, die normale Implementierung ist ungefähr sechsmal schneller. .. ..
Um die Geschwindigkeit zu realisieren, scheint es notwendig zu sein, eine Umgebung für die verteilte Verarbeitung vorzubereiten oder Versuche einer großen Datenmenge durch maschinelles Lernen zu wiederholen. Ich hatte das Gefühl, dass mein nächstes Ziel darin bestand, die Kraft des Funkens auf meiner Haut zu erfahren.
Spark Programming Guid (https://spark.apache.org/docs/1.2.0/programming-guide.html)
ParkContext-Memo (http://www.ne.jp/asahi/hishidama/home/tech/scala/spark/SparkContext.html)
Betrieb von Apache Spark mit Python (pyspark) (http://symfoware.blog68.fc2.com/blog-entry-1188.html)