2017-04-03 1 views
2

저는 스파크의 세계에 새로운면이 있습니다. 표준 편차를 계산하려고하고 다음 코드를 사용했습니다. 다음과 같이 첫 번째 사용 SparkSQL과 코드는 다음과 같습니다RDD v/s를 사용하여 표준 편차를 계산하는 방법 Python의 SparkSQL

sqlsd=spark.sql("SELECT STDDEV(temperature) as stdtemp from 
washing").first().stdtemp 
print(sqlsd) 

을 위의 작동 미세 (내 생각) 내가 다음 코드를 사용하여이 RDD을 수행하려고 할 때 지금 6.070

과 결과를 제공 : -

def sdTemperature(df,spark): 
    n=float(df.count()) 
    m=meanTemperature(df,spark) 
    df=df.fillna({'_id':0,'_rev':0,'count':0,'flowrate':0,'fluidlevel':0, 
    'frequency':0,'hardness':0,'speed':0,'temperature':0,'ts':0,'voltage':0}) 
    rddT=df.rdd.map(lambda r: r.temperature) 
    c=rddT.count() 
    s=rddT.map(lambda x: pow(x-m,2)).sum() 
    print(n,c,s) 
    sd=sqrt(s/c) 
    return sd 

위의 코드를 실행하면 결과가 달라집니다. 내가 얻는 가치는 53.195이다.

나는 무엇을 잘못하고 있는가?. 위에서 수행하려고하는 것은 스파크 데이터 프레임 열 온도에 대한 표준 편차를 계산하고 람다를 사용하는 것입니다. 도움에 미리

덕분에 .. 표준 편차의 두 가지 유형이 있습니다

+0

'nulls'을 건너 뛰고 '0'으로 채우는 것은 똑같지 않습니다. 또한 수치 안정성의 문제가 있습니다. – zero323

+0

감사합니다 - 전적으로 동의합니다. – sunny

답변

0

-이 참조하십시오이 : https://math.stackexchange.com/questions/15098/sample-standard-deviation-vs-population-standard-deviation

비슷한 질문 - 하이브의 stddev()는 포인터가 Calculate the standard deviation of grouped data in a Spark DataFrame

입니다 stddev_samp(). stddev_pop()은 찾고자하는 코드입니다 (코드의 두 번째 부분에서 유추했습니다). 그래서 귀하의 SQL 쿼리 select stddev_pop(temperature) as stdtemp from washing

+0

당신의 칩핑에 감사드립니다.하지만 불행히도 그것은 효과가 없습니다. stdv에서 표준 편차를 변경하면 stddev_pop은 여전히 ​​동일한 결과를 제공합니다. – sunny

1

내게 단서를 준 Zero323 덕분입니다. null 값을 건너 뛰었습니다. 수정 된 코드는 다음과 같습니다 : -

df2=df.na.drop(subset=["temperature"]) 
rddT=df2.rdd.map(lambda r: r.temperature) 
c=rddT.count() 
s=rddT.map(lambda x: pow(x-m,2)).sum() 
sd=math.sqrt(s/c) 
return(sd) 
관련 문제