2017-12-14 25 views
0

나는 pyspark를 사용하고 있으며 내 데이터 프레임의 첫 번째 n 행을 가져 가고 싶습니다. limit이라는 기능이 있습니다. 그러나 매개 변수로는 int 만 필요합니다. 더 큰 값으로 호출하는 방법이 있습니까? 이 코드는 예외가 발생합니다 :limit 함수가 int를 인수로 사용하는 이유는 무엇입니까?

오류
import sys 

dataframe = spark.createDataFrame([('Alice',), ('Bob',)]) 
dataframe.limit(sys.maxsize) 

: 나는 long 행을 추출하는 유효 요구라고 생각

An error occurred while calling o127.limit. Trace: 
py4j.Py4JException: Method limit([class java.lang.Long]) does not exist 
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326) 
    at py4j.Gateway.invoke(Gateway.java:272) 
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 
    at py4j.commands.CallCommand.execute(CallCommand.java:79) 
    at py4j.GatewayConnection.run(GatewayConnection.java:214) 
    at java.lang.Thread.run(Thread.java:748) 

, 그것을하지?

+0

, 왜 그런 일이 나있는 경우 해결 방법은? – desertnaut

+0

질문은 32 비트 int (2,147,483,647) 개의 행을 더 추출하는 방법입니다. –

+1

다행스럽게도이 게시물에 분명하고 모호하지 않게 이것을 설정합니다 ... – desertnaut

답변

2

limit에서 언급 한 것처럼 함수는 입력으로 int 만 사용됩니다. 그러나 sys.maxsize return long이 예외로 표시됩니다 (limit([class java.lang.Long])). 이것을 예외없이 실행하려면 이 필요합니다. 여기

는 조각을 변환됩니다 : -

질문은 무엇
import sys 

dataframe = spark.createDataFrame([('Alice',), ('Bob',)]) 
dataframe.limit(int(sys.maxsize)) 
+0

이것은 작동하지 않습니다. 파이썬에서'int (sys.maxsize)'는 아무것도하지 않습니다. 왜냐하면'sys.maxsize'는 64 비트 임에도 불구하고'int' alredy이기 때문입니다. 게다가, 32bit int보다 더 많은 행을 추출하기를 원하기 때문에, 캐스팅보다 다른 것이 필요하다고 생각합니다. –

+1

@MiroslavStola 나는 이것을 검사하여 32bit int 범위 내에서 한계 값을 제공 할 수 있음을 발견했다. 다른 방법으로 새 ​​열을 추가하고 행 번호를 할당 할 수 있습니다. 그런 다음이 열에 필터를 만들어 제한을 달성 할 수 있습니다. –

+0

64 비트를 허용 할 계획이 있습니까? 해결 방법은 합리적인 것 같습니다. 내가 그것을 받아 들일 수 있도록 대답으로 게시 할 수 있을까요? –