Получение списка файлов в каталоге с шариком

Я думаю, что вы не понимаете, как ведет себя 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 .
  • Путь указывает имя папки для сохранения разделов файла, а не имя файла, внутри этой папки будет один файл на раздел. Если вы хотите снова прочитать такой файл с помощью Spark , то вам нужно только указать папку, Spark будет понимать файлы разделов. Если нет, я бы порекомендовал переименовать файл после того, как - насколько я знаю, нет способа контролировать имя из Spark . ​​
  • Если df слишком большой, чтобы поместиться в память только одного узла, задание не будет выполнено.
  • Если вы выполните это распределенным способом (например, с основной нитью) , то файл будет сохранен не в главном узле, а в одном из подчиненных узлов. Если вам действительно нужно, чтобы он был в главном узле, тогда вы можете собрать его и написать с помощью обычной Scala , как предположил Дмитрий.
  • [Тысяча сто тридцать два]
134
задан 2 revs, 2 users 100% 16 May 2019 в 17:15
поделиться

5 ответов

Вы должны к методу самокрутки устранить файлы, которые Вы не хотите.

Это не легко с созданным в инструментах, но Вы могли использовать 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
5
ответ дан 23 November 2019 в 23:54
поделиться

Я не симулирую быть экспертом по теме, но у Вас должен быть доступ и к glob и к wordexp функция от цели-c, нет?

3
ответ дан 23 November 2019 в 23:54
поделиться

Вы можете легко добиться этого с помощью 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];
239
ответ дан 23 November 2019 в 23:54
поделиться

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.

27
ответ дан 23 November 2019 в 23:54
поделиться

Я бы добавил 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 необходимо помнить о некоторых вещах.

  1. По умолчанию функция glob выполняет поиск файлов в текущей рабочей папке. Для поиска в другом каталоге необходимо добавить имя каталога в образец globbing, как это было сделано в примере, чтобы получить все файлы в /bin .
  2. Вы несете ответственность за уборку памяти, выделенной glob , путем вызова globfree по завершении работы со структурой.

В своем примере я использую параметры по умолчанию и обратный вызов без ошибок. Мужская страница охватывает все варианты на случай, если есть что-то, что вы хотите использовать. Если вы собираетесь использовать вышеуказанный код, я бы предложил добавить его в качестве категории к NSArray или что-то подобное.

NSMutableArray* files = [NSMutableArray array];
glob_t gt;
char* pattern = "/bin/*";
if (glob(pattern, 0, NULL, &gt) == 0) {
    int i;
    for (i=0; i<gt.gl_matchc; i++) {
        [files addObject: [NSString stringWithCString: gt.gl_pathv[i]]];
    }
}
globfree(&gt);
return [NSArray arrayWithArray: files];

Edit: Я создал суть на github, который содержит вышеуказанный код в категории NSArray + Globbing .

10
ответ дан 23 November 2019 в 23:54
поделиться