2017-01-30 6 views
0

Мне нужно перебирать по dataframe с помощью pySpark так же, как мы можем перебирать набор значений, используя для цикла. Ниже приведен код, который я написал. Проблема с этим кодом являетсяИтерация каждой строки Data Frame с использованием pySpark

  1. я должен использовать сбор, который нарушает параллельность
  2. Я не могу печатать любые значения из DataFrame в функции funcRowIter
  3. Я не могу разорвать петлю один раз у меня есть матч найден.

Я должен сделать это в pySpark и не могут использовать панд для этого:

from pyspark.sql.functions import * 
from pyspark.sql import HiveContext 
from pyspark.sql import functions 
from pyspark.sql import DataFrameWriter 
from pyspark.sql.readwriter import DataFrameWriter 
from pyspark import SparkContext 

sc = SparkContext() 
hive_context = HiveContext(sc) 

tab = hive_context.sql("select * from update_poc.test_table_a") 

tab.registerTempTable("tab") 
print type(tab) 

df = tab.rdd 

def funcRowIter(rows): 
    print type(rows) 
     if(rows.id == "1"): 
      return 1 

df_1 = df.map(funcRowIter).collect() 
print df_1 

ответ

1

Кажется, что ваша цель состоит в том, чтобы показать определенную строку. Вы можете использовать .filter, затем .collect.

Например,

row_1 = rdd.filter(lambda x: x.id==1).collect() 

Однако, это не будет эффективным, чтобы попытаться итерацию над dataframe таким образом.

+0

Я пытаюсь сделать это без сборного() сога собирать сломается параллельность –

0

Вместо использования df_1 = df.map(funcRowIter).collect() вы должны попробовать UDF. Надеюсь, это поможет.

from pyspark.sql.functions import struct 
from pyspark.sql.functions import * 
def funcRowIter(rows): 
    print type(rows) 
    if(row is nor None and row.id is not None) 
     if(rows.id == "1"): 
      return 1 
A = udf(funcRowIter, ArrayType(StringType())) 
z = df.withColumn(data_id, A(struct([df[x] for x in df.columns]))) 
z.show() 

collect() никогда не будет хорошие варианты для очень больших объемов данных т.е. миллионов записей

 Смежные вопросы

  • Нет связанных вопросов^_^