데이터 프레임에 값 범위의 단일 값 (예 : 0에서 100까지의 임의의 정수)으로 바꿀 때가 종종있는 null 값이 있습니다. 그리고 항상 같은 가치가 아닙니다.여러 값을 사용하여 스파크에서 DataFrame의 na 값을 변경하는 방법
na.fill()
기능이 이것을 허용하지 않는 것처럼 보입니다. 수동으로 수행하는 좋은 방법을 찾을 수 없습니다. I 한 각 셀을 통해 2.2
데이터 프레임에 값 범위의 단일 값 (예 : 0에서 100까지의 임의의 정수)으로 바꿀 때가 종종있는 null 값이 있습니다. 그리고 항상 같은 가치가 아닙니다.여러 값을 사용하여 스파크에서 DataFrame의 na 값을 변경하는 방법
na.fill()
기능이 이것을 허용하지 않는 것처럼 보입니다. 수동으로 수행하는 좋은 방법을 찾을 수 없습니다. I 한 각 셀을 통해 2.2
내가 마지막으로 다음과 같은 솔루션을 함께했다, 그것은 dataframe의 열에서 null 값을 제거하고 임의의 값으로 대체하는 것이었다 내가 가진 특정 필요성, 일부 도움이 될 희망
dfAmodel = newRow(("A","random.uniform(40, 80)"), df1)
df2 = df1.na.drop(subset=['A']).union(dfAmodel)
여기 dfAmodel만큼 소유주와 새로운 dataframe은 다음과 같습니다 : 메소드를 호출하는 방법
def newRow(model,dataframe):
rows=[]
limit = 0
exec("limit = dataframe.where(dataframe." + model[0] + ".isNull()).count()")
for i in range(0, limit):
x = ""
exec("x = dataframe.where(dataframe."+ model[0] +".isNull()).collect()[i]")
schema = StructType([StructField("A", StringType(), True),
StructField("B", StringType(), True),
StructField("C", StringType(), True),
StructField("D", StringType(), True),
StructField("E", StringType(), True)])
A = None
B = None
C = None
D = None
E = None
if x["A"] != None and model[0] != "A":
A = x["A"].encode('ascii')
if x["B"] != None and model[0] != "B":
B = x["B"].encode('ascii')
if x["C"] != None and model[0] != "C":
C = x["C"].encode('ascii')
if x["D"] != None and model[0] != "D":
D = x["D"].encode('ascii')
if x["E"] != None and model[0] != "E":
E = x["E"].encode('ascii')
exec(model[0] + "=" + model[1])
rows.append(Row(A, B, C, D, E))
return sqlContext.createDataFrame(rows,schema)
ws는 입력 데이터 프레임 df1에서 열 A의 Null 값입니다. A의 Null 값만 변경되고 다른 열의 값은 그대로 유지됩니다. 기타 : exec()는 문자열에서 코드를 실행함에 따라 매우 유용합니다.
솔루션의 강점은 원하는만큼의 데이터 프레임을 위해이 방법을 재사용 할 수 있다는 것입니다. 원하는 데이터 프레임을 변경하고 고려할 열과 뉴스 값을 가져올 공식을 지정하기 만하면됩니다.
이동 한 스파크 & 파이썬 작동
는 값이 널 그것이이면 난수로 변경되는지 확인한다.
먼저 임의로 가져 오기하십시오. 같은 그런 일이 :
df = df.where(df.a.isNull()).replace(null, random.randrange(min, max+1))