Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pyspark - produtividade e poder de processamento

Felipe cruz
November 10, 2015

Pyspark - produtividade e poder de processamento

Felipe cruz

November 10, 2015
Tweet

More Decks by Felipe cruz

Other Decks in Technology

Transcript

  1. Maior oferta feita em Maior oferta feita em uma semana

    na uma semana na BOVESPA? BOVESPA?
  2. ? ?

  3. ? ?

  4. Map

  5. Aplicações Aplicações Filtragem Distintos Top K Por valor Sumarização Índice

    invertido Contagem de palavras Estruturação Ordenação Particionamento Embaralhamento Join Inner join Produto cartesiano nosso exemplo K = 1
  6. Map Map & Reduce & Reduce >>> prices = sc.textFile('s3n://prognoos-pyspark/*.gz')

    \ ... .filter(lambda x: x.count(';') > 14) \ ... .map(lambda x: [s.strip() for s in x.split(';')]) \ ... .map(lambda x: (x[1], x[8], x[15])) ... >>> prices.take(2) [(u'ABEVA70', u'000000000000.350000', u'000000000000008300'), (u'ABEVA70', u'000000000000.350000', u'000000000000007100')]
  7. Map & Map & Reduce Reduce >>> prices = sc.textFile('ftp://*.gz')

    \ ... .filter(lambda x: x.count(';') > 14) \ ... .map(lambda x: [s.strip() for s in x.split(';')]) \ ... .map(lambda x: (x[1], float(x[8]), x[15])) ... >>> sum_all = prices.map(lambda x: x[2])\ ... .reduce(lambda x, y: x + y) ... >>> sum_all 1532623750.0
  8. from datetime import datetime strpt = lambda x: datetime.strptime(x, '%H:%M:%S.%f')

    f = float negs = sc.textFile('s3n://prognoos-pyspark/NEG/*.gz') \ .filter(lambda x: x.count(';') > 14) \ .map(lambda x: [s.strip() for s in x.split(';')]) \ .map(lambda x: (strpt(x[5]), 'NEG', x[1], f(x[3]), f(x[16]), x[17])) buys = sc.textFile('s3n://prognoos-pyspark/CPA/*.gz') \ .filter(lambda x: x.count(';') > 14) \ .map(lambda x: [s.strip() for s in x.split(';')]) \ .map(lambda x: (strpt(x[6]), 'CPA', x[1], f(x[8]), x[15], None)) sell = sc.textFile('s3n://prognoos-pyspark/VDA/*.gz') \ .filter(lambda x: x.count(';') > 14) \ .map(lambda x: [s.strip() for s in x.split(';')]) \ .map(lambda x: (strpt(x[6]), 'VDA', x[1], f(x[8]), None, x[15])) all_operations = negs.union(buys).union(sell) total = all_operations.count() # total = 52980676
  9. data = sc.parallelize(['aa', 'bb', 'ab', 'bc']) def _filter(data): sts =

    ['a', 'b'] rets = [] for st in sts: rets.append((st, data.filter(lambda x: x.startswith(st)))) return rets rdds = _filter(data) for st, rdd in rdds: print((st, rdd.collect())) # ('a', ['bb', 'bc']) # ('b', ['bb', 'bc']) Python - Anti-pattern - não faça!!
  10. DataFrame DataFrame A distributed collection of data grouped into named

    columns http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrame
  11. events = negs.union(buys).union(sell).toDF() # API de DataFrame total = events.count()

    # Salva pra uso posterior events.write.save('s3n://prognoos/events/', format='parquet', mode='Overwrite')
  12. SparkSQL SparkSQL http://spark.apache.org/docs/latest/api/python/pyspark.sql.html >>> path = 's3n://prognoos-test/events' >>> table_name =

    'bovespa_events' >>> events = sqlContext.read.parquet(path) >>> events.registerTempTable(table_name) >>> total_events = sqlContext.sql(''' select count(*) from bovespa_events ''')