2014-12-11 6 views
0

У меня возникают ошибки памяти при выполнении нескольких декартовых объединений, даже если это действительно небольшие наборы данных. Может ли кто-нибудь объяснить, почему это произойдет?Несколько декартовых объединений pySpark

In [1]: foo = sc.records([{'foo': 123}, {'foo': 321}]) 
In [2]: bar = sc.records([{'bar': 123}, {'bar': 321}]) 
In [3]: baz = sc.records([{'baz': 123}, {'baz': 321}]) 
In [4]: qux = foo.cartesian(bar)\ 
    ...:   .map(lambda (x,y): x.merge(y))\ 
    ...:   .cartesian(baz)\ 
    ...:   .map(lambda (x,y): x.merge(y)) 
In [5]: qux.collect() 

java.lang.OutOfMemoryError: GC overhead limit exceeded 

ответ

0

Я в конечном итоге определяя свою собственную функцию cartesianJoin

def cartesianJoin(self, other): 
    return self.map(lambda rec: (0, rec)).join(other.map(lambda rec: (0, rec))).map(lambda (key, (x, y)): x.merge(y)) 
end 
Смежные вопросы