Я думаю, что вы не понимаете, как ведет себя Spark , я бы порекомендовал вам сначала прочитать официальную документацию и / или какое-нибудь руководство.
Тем не менее, я надеюсь, что это отвечает на ваш вопрос.
Этот код сохранит DataFrame
как SINGLE CSV Файл в локальной файловой системе.
Он был протестирован с Spark 2.4.0
с Scala 2.12.8
на Ubuntu 18.04
ноутбуке.
import org.apache.spark.sql.SparkSession
val spark =
SparkSession
.builder
.master("local[*]")
.appName("CSV Writter Test")
.getOrCreate()
import spark.implicits._
val df =
Seq(
("Alex", "2018-01-01 00:00:00", "2018-02-01 00:00:00", "OUT"),
("Bob", "2018-02-01 00:00:00", "2018-02-05 00:00:00", "IN"),
("Mark", "2018-02-01 00:00:00", "2018-03-01 00:00:00", "IN"),
("Mark", "2018-05-01 00:00:00", "2018-08-01 00:00:00", "OUT"),
("Meggy", "2018-02-01 00:00:00", "2018-02-01 00:00:00", "OUT")
).toDF("NAME", "START_DATE", "END_DATE", "STATUS")
df.printSchema
// root
// |-- NAME: string (nullable = true)
// |-- START_DATE: string (nullable = true)
// |-- END_DATE: string (nullable = true)
// |-- STATUS: string (nullable = true)
df.coalesce(numPartitions = 1)
.write
.option(key = "header", value = "true")
.option(key = "sep", value = ",")
.option(key = "encoding", value = "UTF-8")
.option(key = "compresion", value = "none")
.mode(saveMode = "OVERWRITE")
.csv(path = "file:///home/balmungsan/dailyReport/") // Change the path. Note there are 3 /, the first two are for the file protocol, the third one is for the root folder.
spark.stop()
Теперь давайте проверим сохраненный файл.
balmungsan@BalmungSan:dailyReport $ pwd
/home/balmungsan/dailyReport
balmungsan@BalmungSan:dailyReport $ ls
part-00000-53a11fca-7112-497c-bee4-984d4ea8bbdd-c000.csv _SUCCESS
balmungsan@BalmungSan:dailyReport $ cat part-00000-53a11fca-7112-497c-bee4-984d4ea8bbdd-c000.csv
NAME,START_DATE,END_DATE,STATUS
Alex,2018-01-01 00:00:00,2018-02-01 00:00:00,OUT
Bob,2018-02-01 00:00:00,2018-02-05 00:00:00,IN
Mark,2018-02-01 00:00:00,2018-03-01 00:00:00,IN
Mark,2018-05-01 00:00:00,2018-08-01 00:00:00,OUT
Meggy,2018-02-01 00:00:00,2018-02-01 00:00:00,OUT
Файл _SUCCESS
существует, чтобы сигнализировать об успешной записи.
file://
для сохранения в локальной файловой системе вместо HDFS . Вы должны к методу самокрутки устранить файлы, которые Вы не хотите.
Это не легко с созданным в инструментах, но Вы могли использовать RegExKit, Облегченный для помощи с нахождением элементов в возвращенном массиве, которым Вы интересуетесь. Согласно информации о версии это должно работать и в Какао и в Сенсорных Какао приложениях.
Вот демонстрационный код, который я описал приблизительно за 10 минут. Я изменил < и> к, "потому что они не обнаруживались в пред блок, но он все еще работает с кавычками. Возможно, кто-то, кто знает больше о форматировании код здесь на StackOverflow, исправит это (Chris?).
Это - "проект шаблона Command Line Utility" Инструмента Основы. Если я разбужу своего демона мерзавца и работу моего домашнего сервера, то я отредактирую это сообщение для добавления URL для проекта.
#import "Foundation/Foundation.h" #import "RegexKit/RegexKit.h" @interface MTFileMatcher : NSObject { } - (void)getFilesMatchingRegEx:(NSString*)inRegex forPath:(NSString*)inPath; @end int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; // insert code here... MTFileMatcher* matcher = [[[MTFileMatcher alloc] init] autorelease]; [matcher getFilesMatchingRegEx:@"^.+\\.[Jj][Pp][Ee]?[Gg]$" forPath:[@"~/Pictures" stringByExpandingTildeInPath]]; [pool drain]; return 0; } @implementation MTFileMatcher - (void)getFilesMatchingRegEx:(NSString*)inRegex forPath:(NSString*)inPath; { NSArray* filesAtPath = [[[NSFileManager defaultManager] directoryContentsAtPath:inPath] arrayByMatchingObjectsWithRegex:inRegex]; NSEnumerator* itr = [filesAtPath objectEnumerator]; NSString* obj; while (obj = [itr nextObject]) { NSLog(obj); } } @end
Я не симулирую быть экспертом по теме, но у Вас должен быть доступ и к glob
и к wordexp
функция от цели-c, нет?
Вы можете легко добиться этого с помощью NSPredicate, например так:
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *dirContents = [fm contentsOfDirectoryAtPath:bundleRoot error:nil];
NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"];
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:fltr];
Если вам нужно сделать это с помощью NSURL, это будет выглядеть так:
NSURL *bundleRoot = [[NSBundle mainBundle] bundleURL];
NSArray * dirContents =
[fm contentsOfDirectoryAtURL:bundleRoot
includingPropertiesForKeys:@[]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:nil];
NSPredicate * fltr = [NSPredicate predicateWithFormat:@"pathExtension='jpg'"];
NSArray * onlyJPGs = [dirContents filteredArrayUsingPredicate:fltr];
What about using NSString's hasSuffix and hasPrefix methods? Something like (if you're searching for "foo*.jpg"):
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager] directoryContentsAtPath:bundleRoot];
for (NSString *tString in dirContents) {
if ([tString hasPrefix:@"foo"] && [tString hasSuffix:@".jpg"]) {
// do stuff
}
}
For simple, straightforward matches like that it would be simpler than using a regex library.
Я бы добавил div, чтобы очистить поплавки:
<div id="top div" style="width:400px;">
<div style="float:left;"><img src="images/xlab.jpg" width="100px" height="200px" /></div>
<div style="float:right;"><img src="images/ucbseal.jpg" width="100px" height="250px" /></div>
<div style="clear:both;"></div>
</div>
<div id="bottom div"><img src="images/xlab.jpg" width="200px" height="200px" /></div>
-121--3260466- Попробуйте что-то подобное на верхней части вашего класса body
workflow_spec.states.keys.each do |state|
named_scope state, :conditions => ['workflow_state = ?', state]
end
-121--5086163- Unix имеет библиотеку, которая может выполнять операции глобализации файлов для вас. Функции и типы объявляются в заголовке с именем glob.h
, поэтому необходимо # включить
. Если открыть терминал, откройте справочную страницу для glob, набрав man 3 glob
, вы получите всю необходимую информацию для использования функций.
Ниже приведен пример заполнения массива файлами, соответствующими образцами globbing. При использовании функции glob
необходимо помнить о некоторых вещах.
glob
выполняет поиск файлов в текущей рабочей папке. Для поиска в другом каталоге необходимо добавить имя каталога в образец globbing, как это было сделано в примере, чтобы получить все файлы в /bin
. glob
, путем вызова globfree
по завершении работы со структурой. В своем примере я использую параметры по умолчанию и обратный вызов без ошибок. Мужская страница охватывает все варианты на случай, если есть что-то, что вы хотите использовать. Если вы собираетесь использовать вышеуказанный код, я бы предложил добавить его в качестве категории к NSArray
или что-то подобное.
NSMutableArray* files = [NSMutableArray array];
glob_t gt;
char* pattern = "/bin/*";
if (glob(pattern, 0, NULL, >) == 0) {
int i;
for (i=0; i<gt.gl_matchc; i++) {
[files addObject: [NSString stringWithCString: gt.gl_pathv[i]]];
}
}
globfree(>);
return [NSArray arrayWithArray: files];
Edit: Я создал суть на github, который содержит вышеуказанный код в категории NSArray + Globbing .