2017-10-13 74 views
5

Próbuję czytać .csv 2GB ~ (5mi wierszy) w sparklyr z:Sparklyr ignorując linia separatora

bigcsvspark <- spark_read_csv(sc, "bigtxt", "path", 
           delimiter = "!", 
           infer_schema = FALSE, 
           memory = TRUE, 
           overwrite = TRUE, 
           columns = list(
            SUPRESSED COLUMNS AS = 'character')) 

I otrzymuję następujący błąd:

Job aborted due to stage failure: Task 9 in stage 15.0 failed 4 times, most recent failure: Lost task 9.3 in stage 15.0 (TID 3963, 
10.1.4.16): com.univocity.parsers.common.TextParsingException: Length of parsed input (1000001) exceeds the maximum number of characters defined in your parser settings (1000000). Identified line separator characters in the parsed content. This may be the cause of the error. The line separator in your parser settings is set to '\n'. Parsed content: ---lines of my csv---[\n] 
---begin of a splited line --- Parser Configuration: CsvParserSettings:  ... default settings ... 

oraz:

CsvFormat: 
    Comment character=\0 
    Field delimiter=! 
    Line separator (normalized)=\n 
    Line separator sequence=\n 
    Quote character=" 
    Quote escape character=\ 
    Quote escape escape character=null Internal state when error was thrown: 
     line=10599, 
     column=6, 
     record=8221, 
     charIndex=4430464, 
     headers=[---SUPRESSED HEADER---], 
     content parsed=---more lines without the delimiter.--- 

Jak pokazano powyżej, w pewnym momencie separator linii zaczyna być ignorowany. W czystym R można odczytywać bez problemu, tylko read.csv przekazując ścieżkę i ogranicznik.

+0

Zgodnie z sugestią autora, wypróbuj filtr Dplyrs, aby usunąć/zidentyfikować niechciany wiersz. https://github.com/rstudio/sparklyr/issues/83 – Igor

+0

Spróbuję, na początku podejrzewałem, że bufor nie jest w stanie poradzić sobie z danymi, ale ponieważ dane są ogromnym bałaganem, możliwe jest problem z danymi, próbuję też napisać skrypt Scala, aby przekonwertować na Parquet. –

Odpowiedz

1

Wygląda na to, że plik nie jest tak naprawdę plikiem CSV. Zastanawiam się, czy w tej sytuacji działałby lepiej spark_read_text(). Powinieneś być w stanie doprowadzić wszystkie linie do Sparka i podzielić linie na pola w pamięci, Ta ostatnia część będzie najtrudniejsza.