хорошая новость для пользователя python в случае, если у вас много столбцов, и вы хотите сохранить все остальные столбцы, не разбитые на разделы в формате csv, которые не удастся, если вы используете «текстовый» метод как предложение Ника Чаммаса.
people_df.write.partitionBy("number").text("people")
сообщение об ошибке «AnalysisException: источник данных u'Text поддерживает только один столбец, и у вас есть 2 столбца.;»
In spark 2.0.0 (моя тестовая среда - это искра hdp 2.0.0) пакет «com.databricks.spark.csv» теперь интегрирован и позволяет нам сохранять текстовый файл, разделенный только на один столбец, см. Пример blow:
people_rdd = sc.parallelize([(1,"2016-12-26", "alice"),
(1,"2016-12-25", "alice"),
(1,"2016-12-25", "tom"),
(1, "2016-12-25","bob"),
(2,"2016-12-26" ,"charlie")])
df = people_rdd.toDF(["number", "date","name"])
df.coalesce(1).write.partitionBy("number").mode("overwrite").format('com.databricks.spark.csv').options(header='false').save("people")
[root@namenode people]# tree
.
├── number=1
│?? └── part-r-00000-6bd1b9a8-4092-474a-9ca7-1479a98126c2.csv
├── number=2
│?? └── part-r-00000-6bd1b9a8-4092-474a-9ca7-1479a98126c2.csv
└── _SUCCESS
[root@namenode people]# cat number\=1/part-r-00000-6bd1b9a8-4092-474a-9ca7-1479a98126c2.csv
2016-12-26,alice
2016-12-25,alice
2016-12-25,tom
2016-12-25,bob
[root@namenode people]# cat number\=2/part-r-00000-6bd1b9a8-4092-474a-9ca7-1479a98126c2.csv
2016-12-26,charlie
В моей искровой версии 1.6 .1 enviroment, код не выдавал никакой ошибки, однако это только один сгенерированный файл. он не разбивается на две папки.
Надеюсь, это поможет.
От Safari Developer FAQ
:
Safari поставлется с консервативной политикой в отношении файлов куки, которая ограничивает записи cookie только выбранными страницами ("перемещенный к") пользователем. Эта консервативная политика по умолчанию может перепутать основанные на кадре сайты, которые пытаются записать cookie и сбой.
я не нашел способа обойти это.
, Если это стоит чего-нибудь, Chrome не устанавливает cookie также, если Вы используете <script
> добавление метода, но если у Вас есть скрытое <img
> с тем же источником, работами Chrome в дополнение к остальной части браузеров (кроме, снова, Safari)
Это не недостающий атрибут типа, это является раздражающим Вы?-)
<script type="text/javascript">
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.src = "A.com/setCookie?cache=1231213123";
head.appendChild(script);
</script>
Попробуйте что-то как:
var w = window.open("A.com/setCookie?cache=1231213123");
w.close();
Это может обойти политику безопасности сафари.
Возможно, практично создайте и нажмите на ссылку с href="A.com/setCookie?cache=1231213123"
и целевой атрибут, указывающий на скрытый iframe. То, что может политика обходного Safari пользовательской навигации для установки cookie (у меня нет Safari удобным для тестирования.)
Я сделал некоторое обширное расследование вокруг этого, когда я пытался развернуть сайт, который использовал Windows Live ID, который зависел от способности смочь привести в порядок сторонние cookie, чтобы выйти из системы. Это просто... не работало. Ничто, что мы могли сделать, не заставит это работать. Живая идентификационная команда также сделала обширное расследование, и их ответ был, "не может заставить его работать".
Существует что-то вроде злого приема, предполагающего, что у них есть установленная флэш-память.
я не уверен, работает ли это все еще или нет, но Flash'es "Локальные общие объекты" иначе , Флэш-куки могли бы помочь Вам плавать вокруг той-же-доменной-политики Safari.
по Локальному общему объекту Однако это может быть сложно для реализации по меньшей мере.
Additonally, LSO's прибывает в свет, как являющийся кошмаром безопасности:
Так думает тщательно перед использованием их.
Обходной путь, который мы только что придумали в моей работе, заключался в установке cookie через window.open () - это может быть не оптимальным для вас (так как у вас будет уродливое всплывающее окно окно открыто), но у нас это сработало. В любом случае нам нужно было открыть всплывающее окно для аутентификации OAuth.
Итак, суть того, что мы сделали:
Опять же, действует не во всех решениях, но сработало в нашем. Надеюсь, это поможет.
Обратите внимание на эту строку:
script.src = "A.com/setCookie?cache=1231213123";
Я не мог заставить это работать, пока я не добавил http, т.е.
script.src = "http://A.com/setCookie?cache=1231213123";
Вот работающее решение:
http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/
Я знаю, что этот вопрос довольно старый, но он помог мне решить проблему с куки-файлами:
var cookieForm = document.createElement("form");
cookieForm.action = "A.com/setCookie?cache=1231213123";
cookieForm.method = "post";
document.body.appendChild(cookieForm);
cookieForm.submit();
Идея разместить форму на странице, которая устанавливает ваши куки-файлы.