2017-10-17 10 views
0

나는 내 상황을 설명하기 위해 최선을 다할 것입니다. 그런 다음이 사이트의 다른 사용자가 제가 취하는 과정이 의미가 있는지 또는 내 접근 방식/옵션을 재평가해야 하는지를 알 수 있기를 바랍니다.스파크 데이터 프레임에 롤링 회귀를 수행하기 위해 UDAF를 작성하는 것이 합리적입니까?

배경 :

나는 테이블을 조회 할 수 pyspark.sql를 사용하여 하이브 테이블로 구성 된 스파크 dataframe이 스칼라, 자바 또는 R. 대 파이썬에 가장 잘 알고 있기 때문에 내가 pyspark를 사용합니다. 이 데이터 프레임에는 여러 가지 '파일'이 있습니다. 각 파일은 timeseries 데이터로 구성됩니다. 각 '파일'의 전체 시간 값에 걸쳐 데이터의 하위 집합에 롤링 회귀를 수행해야합니다. 좋은 연구를 한 후에 창 개체를 만들려고했는데, 함수 내에서 spark ml linear regression을 사용하여 필자의 선형 회귀가 어떻게 발생했는지 지정하는 UDF를 작성한 다음 데이터를 데이터 프레임으로 반환했습니다. 이 .withColumn() 작업의 컨텍스트 내부에서 발생합니다. 이것은 의미가 있었고 나는이 접근법이 옳은 것처럼 느꼈습니다. 내가 발견 한 것은 현재 pyspark가 UDAF (see the linked jira)를 만드는 기능을 지원하지 않는다는 것입니다. 그래서 여기에 내가 현재 고려하고있는 것이 있습니다.

herehere으로 표시되며, UDAF를 스칼라로 작성한 다음 pyspark 컨텍스트에서 참조 할 수 있습니다. 또한 UDAF (스칼라로 작성)가 다중 입력 열을 사용할 수 있다는 것을 here으로 보여줍니다 (필자는 다중 선형 회귀를 수행 할 것이기 때문에 필요한 기능입니다 - 3 개의 매개 변수에서 가져옴). 제가 확신 할 수없는 것은 UDAF가 회귀에 사용할 org.apache.spark.ml.regression을 사용할 수있는 능력입니다. 이 작업을 수행 할 수 없으면 매트릭스를 사용하여 수동으로 작업을 실행할 수 있습니다 (scala가 허용하는 경우). 나는 사실상 scala를 사용하는 경험이 없지만 확실히이 하나의 함수를 작성하기에 충분한 지식을 얻었습니다.

누구든지이 작업에 대한 통찰력이나 제안 사항이 있는지 궁금합니다. 내가해온 연구가 끝난 후에도 이것이 가능한 것처럼 느껴질 수 있습니다. 그러나, 나는 그것이 근본적으로 불가능하거나 내가 상상할 수있는 것보다 더 어려울 때이 작업을하기 위해 많은 시간을 굽는 것을 두려워합니다.

귀하의 통찰력에 감사드립니다.

+0

계산에 대한 자세한 내용과 org.apache.spark.ml.regression 사용 방법을 알기가 어렵습니다. 좀 더 자세히 설명해 주시겠습니까? –

+0

확실히, 여기에 파이썬 코드가 있습니다. tbh 테스트 할 수 없기 때문에 작동하는지 확실하지 않습니다. def lrreg_int (sin_time, cos_time, prediction) : lr = ml.regression.LinearRegression (predictionCol = 예측) 모델 = lr.fit (sin_time, cos_time) 요격 = model.intercept return intercept' –

+0

아직 성취하려는 것이 명확하지 않습니다.당신은 회귀 선형 회귀를 시계열을 기반으로 회귀 지향적 인 회귀 접근법처럼 들리 겠지만 스트리밍 지향적 인 mllib를 살펴 보셨습니까? 당신이 말한 것을 바탕으로, 이것은 당신이 원하는 것일 수 있습니다 http://spark.apache.org/docs/2.2.0/mllib-linear-methods.html#streaming-linear-regression –

답변

0

내가 함수 내에서 스파크 ml의 선형 회귀 분석을 사용하여 (발생 내 선형 회귀를 원하는 방법 지정된 UDF를 만들고, 나는 창 개체를 만들 계획 한 연구의 좋은 비트를 수행 한 후

PySpark가 UDAF를 지원하는지 여부와 상관없이 작동하지 않습니다 .Updf에서 UDF/UDAF의 분산 알고리즘을 사용할 수 없습니다.

질문은 다소 모호하지만 사용하는 데이터의 양은 분명하지 않지만, d scikit-learn (또는 유사한 도구)으로 일반 RDD를 사용하거나 모든 것을 구현하려고합니다. 기스로부터.

+0

"UDF/UDAF의 분산 알고리즘을 사용할 수 없습니다." 여기서 회귀 라이브러리를 사용할 수 없다는 의미입니까? 분산 알고리즘에 대해 언급 한 것입니까? RDD에서이 작업을 수행하는 것을 고려 했었지만 데이터를 꽤 많이 사용하면서 앞뒤로 가야했습니다. 옵션이라면 생각할 것입니다. 내가 말하는 회귀 분석에서 회귀 함수를 사용할 수 없다는 것이 확실하다면 (적어도 파이썬에서는)이를 처리 할 수있는 자체 함수를 만들 수 있습니다. 따라서 옵션을 알고있는 것이 좋습니다. 또한 구체적인 명확성을 주셔서 감사합니다. –

+0

예, 이것이 내 뜻입니다. – user8792510

+0

좋아요, 그래서 회귀 코드를 직접 작성하고 그렇지 않으면 제가 제안하는 것이 합리적이고 가능합니까? 차가운, 나는 그 때 해결 된 나의 응답을 표시 할 것이다. 감사!! –