** Rapide avec étincelle ** Je l'ai attrapé dans mon oreille, alors j'ai essayé de le déplacer une fois.
Je l'ai présenté en utilisant Homebrew comme suit.
brew install apache-spark
J'ai obtenu des données de code postal au format CSV sur le site suivant. zipcloud
Puisqu'il a été installé avec Homebrew, déplacez-le dans le dossier apache-spark suivant.
cd /usr/local/Cellar/apache-spark/1.5.2/bin/
Apparemment, spark prend en charge scala, java, python, R, mais je voulais utiliser python
pyspark
Commencer avec. Si vous voyez la marque «étincelle», c'est OK.
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.
>>>
Il existe environ 120 000 codes postaux à l'échelle nationale. Avant de l'implémenter, j'ai copié les données 88 fois en supposant qu'une grande quantité de données serait traitée, et je l'ai doublée à environ 12 millions pour créer un nouveau fichier CSV. Et
sparkSample.py
# -*- coding: utf-8 -*-
import time
from pyspark import SparkContext
def main():
#Kanji que vous souhaitez rechercher
queryList = ["cerf","oiseau","ours","singe","chien"]
#Début de la mesure du temps
start = time.time()
#base de données
sc = SparkContext('local', 'Simple App')
logData = sc.textFile('KEN_ALL_OVER_TEN_MILLION.CSV')
#Extraire des informations pour chaque requête
for item in queryList:
#Liste avec division
lines = logData.map(lambda x: x.split(','))
#Extraire ceux dont le code postal contient 7.
numberPicks = lines.filter(lambda s: unicode('7', 'utf-8') in s[2])
#Extrayez les noms des villes, villages et villages qui incluent le kanji cible
namePicks = lines.filter(lambda s: unicode(item, 'utf-8') in s[7])
#Stocker dans la liste
desList = namePicks.collect()
#Sortie de journal
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')
#Sortie du nombre de coups
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')
#Arrêt de la mesure du temps
finish_time = time.time() - start
print u"Time[total]:{0}".format(finish_time) + u"[sec]"
#Terminer le traitement
sc.stop()
if __name__ == '__main__':
main()
Lors de l'évaluation, j'ai également écrit le code lorsque Spark n'est pas utilisé.
plain.py
# -*- coding: utf-8 -*-
import time
def pickAnimal(recordList, qList, start):
#Extraire des informations pour chaque requête
for q in qList:
count = 0
for record in recordList:
sepRecord = record.split(",")
if len(sepRecord) == 15:
#Extraire ceux dont le code postal contient 7.
#Extrayez les noms des villes, villages et villages qui incluent le kanji cible
if -1 < sepRecord[2].find("7") and -1 < sepRecord[7].find(q):
count = count + 1
#Sortie de journal
print record
#Sortie du nombre de coups
print "query:" + q + ", count:" + str(count) + ", Time:{0}".format(time.time() - start) + "[sec]"
def main():
sepRecordList = []
#Kanji que vous souhaitez rechercher
queryList = ["cerf","oiseau","ours","singe","chien"]
#base de données
srcpath = "KEN_ALL_OVER_TEN_MILLION.CSV"
srcIN = open(srcpath, 'r')
#Début de la mesure du temps
start = time.time()
for line in srcIN:
sepRecordList.append(line)
pickAnimal(sepRecordList, queryList, start)
#Arrêt de la mesure du temps
finish_time = time.time() - start
print "Time:{0}".format(finish_time) + "[sec]"
#Terminer le traitement
srcIN.close()
if __name__ == '__main__':
main()
$pyspark sparkSample.py
~(Omission)~
Time[total]:645.52906394[sec]
$python plain.py
~(Omission)~
Time:112.966698885[sec]
Hmm, c'est environ 6 fois plus rapide à mettre en œuvre normalement. .. ..
Afin de réaliser la vitesse, il semble qu'il soit nécessaire de préparer un environnement pour le traitement distribué ou de répéter les essais d'une grande quantité de données par apprentissage automatique. J'ai senti que mon prochain objectif était d'expérimenter le pouvoir de l'étincelle sur ma peau.
--SparkContext mémo (http://www.ne.jp/asahi/hishidama/home/tech/scala/spark/SparkContext.html)