Показано, что число данных в кадре равно 4067
ботаем спарк 2.3.0 наAWW EMR
, ПоследующийDataFrame
"df
"не пустой и скромного размера:
scala> df.count
res0: Long = 4067
Следующий код хорошо работает для записиdf
вhdfs
:
scala> val hdf = spark.read.parquet("/tmp/topVendors")
hdf: org.apache.spark.sql.DataFrame = [displayName: string, cnt: bigint]
scala> hdf.count
res4: Long = 4067
Однако, используя тот же код для записи в локальныйparquet
или жеcsv
файл заканчивается пустыми результатами:
df.repartition(1).write.mode("overwrite").parquet("file:///tmp/topVendors")
scala> val locdf = spark.read.parquet("file:///tmp/topVendors")
org.apache.spark.sql.AnalysisException: Unable to infer schema for Parquet. It must be specified manually.;
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$9.apply(DataSource.scala:207)
at org.apache.spark.sql.execution.datasources.DataSource$anonfun$9.apply(DataSource.scala:207)
at scala.Option.getOrElse(Option.scala:121)
Мы можем видеть, почему это терпит неудачу:
ls -l /tmp/topVendors
total 0
-rw-r--r-- 1 hadoop hadoop 0 Jul 30 22:38 _SUCCESS
Так что естьнет паркет файл пишется.
Я пробовал это, может быть, двадцать раз и для обоихcsv
а такжеparquet
и на двух разныхEMR
Серверы: такое же поведение проявляется во всех случаях.
ЭтоEMR
конкретная ошибка? Более общийEC2
ошибка? Что-то другое? Этот код работает наspark
наmacos
.
В случае, если это имеет значение - вот информация о версии:
Release label:emr-5.13.0
Hadoop distribution:Amazon 2.8.3
Applications:Spark 2.3.0, Hive 2.3.2, Zeppelin 0.7.3