Как написать некоторый val как файл JSON на S3 с опцией перезаписи? [Дубликат]

Используйте функцию callback() внутри успеха foo(). Попробуйте таким образом. Это просто и легко понять. & nbsp;

var lat = "";
var lon = "";
function callback(data) {
    lat = data.lat;
    lon = data.lon;
}
function getLoc() {
    var url = "http://ip-api.com/json"
    $.getJSON(url, function(data) {
        callback(data);
    });
}

getLoc();
69
задан maasg 20 November 2014 в 11:01
поделиться

8 ответов

UPDATE: Предложите использовать Dataframes, плюс что-то вроде ... .write.mode(SaveMode.Overwrite) ....

Для более старых версий попробуйте

yourSparkConf.set("spark.hadoop.validateOutputSpecs", "false")
val sc = SparkContext(yourSparkConf)

В 1.1.0 вы можете установить настройки conf с помощью spark-submit script с флагом -conf.

ПРЕДУПРЕЖДЕНИЕ. Согласно @piggybox, в Spark есть ошибка, в которой она будет только перезаписывать файлы, необходимые для записи файлов part-, любых других файлов будет оставлен неуправляемым.

66
ответ дан samthebest 23 August 2018 в 15:45
поделиться

df.write.mode ('overwrite'). Паркет («/ output / folder / path») работает, если вы хотите перезаписать файл паркета с помощью python. Это в искру 1.6.2. API может отличаться в более поздних версиях

4
ответ дан akn 23 August 2018 в 15:45
поделиться

Документация для параметра spark.files.overwrite говорит следующее: «Записывать ли файлы, добавленные через SparkContext.addFile(), когда целевой файл существует, а его содержимое не соответствует файлам источника». Таким образом, это не влияет на метод saveAsTextFiles.

Вы можете сделать это перед сохранением файла:

val hadoopConf = new org.apache.hadoop.conf.Configuration()
val hdfs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI("hdfs://localhost:9000"), hadoopConf)
try { hdfs.delete(new org.apache.hadoop.fs.Path(filepath), true) } catch { case _ : Throwable => { } }

Aas объяснено здесь: http: // apache-spark- user-list.1001560.n3.nabble.com/How-can-I-make-Spark-1-0-saveAsTextFile-to-overwrite-existing-file-td6696.html

24
ответ дан Alberto Bonsanto 23 August 2018 в 15:45
поделиться

, поскольку df.save(path, source, mode) устарел, ( http://spark.apache.org/docs/1.5.0/api/scala/index.html#org.apache.spark.sql.DataFrame )

использовать df.write.format(source).mode("overwrite").save(path), где df.write является DataFrameWriter

'source' может быть («com.databricks.spark.avro» | «паркет» | «json»)

17
ответ дан Curycu 23 August 2018 в 15:45
поделиться

В документации pyspark.sql.DataFrame.save (в настоящее время в 1.3.1) вы можете указать mode='overwrite' при сохранении DataFrame:

myDataFrame.save(path='myPath', source='parquet', mode='overwrite')

I Мы проверили, что это даже удалит файлы с файлами разделов. Итак, если вы сказали изначально 10 разделов / файлов, но затем перезаписали папку с DataFrame, в которой было только 6 разделов, результирующая папка будет иметь 6 разделов / файлов.

См. Spark SQL документацию для получения дополнительной информации о параметрах режима.

18
ответ дан dnlbrky 23 August 2018 в 15:45
поделиться

Если вы хотите использовать свой собственный формат вывода, вы также сможете получить желаемое поведение с помощью RDD.

Посмотрите на следующие классы: FileOutputFormat , FileOutputCommitter

В формате выходного файла у вас есть метод с именем checkOutputSpecs, который проверяет, существует ли выходной каталог. В FileOutputCommitter у вас есть commitJob, который обычно переносит данные из временного каталога в свое конечное место.

Я еще не смог его проверить (сделаю это, как только у меня будет несколько бесплатных минут) но теоретически: если я расширяю FileOutputFormat и переопределяю checkOutputSpecs на метод, который не генерирует исключение в каталоге, уже существует, и отредактируйте метод commitJob моего пользовательского обработчика вывода для выполнения той логики, которую я хочу (например, переопределить некоторые из файлов, добавьте другие), чем я также смогу добиться желаемого поведения с помощью RDD.

Формат вывода передается в: saveAsNewAPIHadoopFile (который также называется методом saveAsTextFile, чтобы фактически сохранить файлы). И коммиттер вывода настроен на уровне приложения.

0
ответ дан Michael Kopaniov 23 August 2018 в 15:45
поделиться

Эта перегруженная версия функции сохранения работает для меня:

yourDF.save (outputPath, org.apache.spark.sql.SaveMode.valueOf («Overwrite»))

Приведенный выше пример заменит существующую папку. Сабемод также может принимать эти параметры ( https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/sql/SaveMode.html ):

Append: Режим добавления означает, что при сохранении DataFrame в источнике данных, если данные / таблица уже существует, ожидается, что содержимое DataFrame будет добавлено к существующим данным.

ErrorIfExists: Режим ErrorIfExists означает, что при сохранении DataFrame в источнике данных, если данные уже существуют, ожидается, что будет выбрано исключение.

Игнорировать: режим Ignore означает, что при сохранении DataFrame в источнике данных, если данные уже существует, ожидается, что операция сохранения не сохранит содержимое DataFrame и не изменит существующие данные.

1
ответ дан Shay 23 August 2018 в 15:45
поделиться
  val jobName = "WordCount";
  //overwrite the output directory in spark  set("spark.hadoop.validateOutputSpecs", "false")
  val conf = new 
  SparkConf().setAppName(jobName).set("spark.hadoop.validateOutputSpecs", "false");
  val sc = new SparkContext(conf)
4
ответ дан vaquar khan 23 August 2018 в 15:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: