Python 환경에서 딥 러닝 애플리케이션을위한 쪽모이 세공 파일로 Apache Spark DataFrame을 작성했습니다. 나는 현재 앞서 언급 한 파일을 읽을 때 petastorm ( 이 노트북에 이어 )과 horovod 프레임 워크 의 기본 예제를 구현하는 데 문제가 있습니다. DataFrame에는 다음과 같은 유형이 있습니다. DataFrame[features: array<float>, next: int, weight: int]
(DataBricks의 노트북에서와 마찬가지로 저는 features
VectorUDT 였는데, 배열로 변환했습니다).
두 경우 모두 Apache Arrow에서 ArrowIOError : Invalid parquet file. Corrupt footer.
오류가 발생합니다.
내가 발견 이 질문 과에서 이 PR 버전 2.0로, 불꽃 작성하지 않는 _metadata
또는 _common_metadata
하지 않는 한, 파일을 spark.hadoop.parquet.enable.summary-metadata
로 설정 true
스파크의 구성; 해당 파일이 실제로 누락되었습니다.
따라서이 환경에서 내 DataFrame을 다시 작성하려고 시도했지만 여전히 _common_metadata
파일 이 없습니다 . 또한 작동하는 것은 독자를 구성 할 때 스키마를 petastorm에 명시 적으로 전달하는 schema_fields
것 make_batch_reader
입니다 (예를 들어 전달 합니다. horovod.spark.keras.KerasEstimator
의 생성자 에 그러한 매개 변수가 없기 때문에 horovod의 문제입니다 ).
가능하다면 Spark가 해당 파일을 출력하거나 Arrow에서 스키마를 추론하기 위해 Spark 가하는 것처럼 어떻게 할 수 있습니까?
# Saving df
print(spark.config.get('spark.hadoop.parquet.enable.summary-metadata')) # outputs 'true'
df.repartition(10).write.mode('overwrite').parquet(path)
# ...
# Training
import horovod.spark.keras as hvd
from horovod.spark.common.store import Store
model = build_model()
opti = Adadelta(learning_rate=0.015)
loss='sparse_categorical_crossentropy'
store = Store().create(prefix_path=prefix_path,
train_path=train_path,
val_path=val_path)
keras_estimator = hvd.KerasEstimator(
num_proc=16,
store=store,
model=model,
optimizer=opti,
loss=loss,
feature_cols=['features'],
label_cols=['next'],
batch_size=auto_steps_per_epoch,
epochs=auto_nb_epochs,
sample_weight_col='weight'
)
keras_model = keras_estimator.fit_on_parquet() # Fails here with ArrowIOError
문제는 pyarrow 0.14+ ( issues.apache.org/jira/browse/ARROW-4723 ) 에서 해결되었으며 , pip로 업데이트 된 버전을 설치해야합니다 (Databricks Runtime 6.5까지, 포함 된 버전은 0.13입니다). 이것을 지적한 @joris '의 의견에
감사드립니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다