[ https://issues.apache.org/jira/browse/ARROW-11243?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17264970#comment-17264970 ]
Jared Lander commented on ARROW-11243: -------------------------------------- My work around was using dplyr::mutate() and \{hms} to convert the character to time after collecting the data, but that seems less than ideal for real workflows. > [C++] Parse time32 from string and infer in CSV reader > ------------------------------------------------------ > > Key: ARROW-11243 > URL: https://issues.apache.org/jira/browse/ARROW-11243 > Project: Apache Arrow > Issue Type: Improvement > Components: C++ > Affects Versions: 2.0.0 > Environment: Ubuntu 18.04, R 4.0.3 > Reporter: Jared Lander > Priority: Minor > Fix For: 4.0.0 > > Attachments: sampletimedata.csv > > > When reading a CSV with read_csv_arrow() with date types and time types, the > dates are read as datetimes rather than dates and times are read as > characters rather than time. > The first problem can be fixed by supplying date32() to schema(), though > better inference would be nice. However, supplying time32() to schema() > causes an error. > Here is a sample dataset, also attached. > date,time,reading > 2021-01-01,00:00:00,67.8 > 2021-01-01,00:00:00,72.4 > 2021-01-01,00:00:00,63.1 > 2021-01-01,00:05:00,67.8 > Reading with readr::read_csv() results in a tibble with three columns: date, > time, dbl, as expected. > > {code:r} > samp_readr <- readr::read_csv('sampledata.csv') > samp_readr > {code} > {code:r} > # A tibble: 4 x 3 > date time reading > <date> <time> <dbl> > 1 2021-01-01 00'00" 67.8 > 2 2021-01-01 00'00" 72.4 > 3 2021-01-01 00'00" 63.1 > 4 2021-01-01 05'00" 67.8 > {code} > Reading with arrow::read_csv_arrow() without providing schema() results in a > tibble with three columns: dttm, chr, dbl. > {code:r} > samp_arrow_plain <- arrow::read_csv_arrow('sampledata.csv') > samp_arrow_plain > {code} > {code:r} > # A tibble: 4 x 3 > date time reading > <dttm> <chr> <dbl> > 1 2020-12-31 19:00:00 00:00:00 67.8 > 2 2020-12-31 19:00:00 00:00:00 72.4 > 3 2020-12-31 19:00:00 00:00:00 63.1 > 4 2020-12-31 19:00:00 00:05:00 67.8 > {code} > Reading with arrow::read_csv_arrow() and providing date=date32() via schema() > to col_types results in a tibble with three columns: date, chr, dbl. > {code:r} > samp_arrow_date <- arrow::read_csv_arrow('sampledata.csv', > col_types=schema(date=date32())) > samp_arrow_date > {code} > {code:r} > # A tibble: 4 x 3 > date time reading > <date> <chr> <dbl> > 1 2021-01-01 00:00:00 67.8 > 2 2021-01-01 00:00:00 72.4 > 3 2021-01-01 00:00:00 63.1 > 4 2021-01-01 00:05:00 67.8 > {code} > Reading with arrow::read_csv_arrow() and providing time=time32() via schema() > to col_types generates an error. > {code:r} > samp_arrow_time <- arrow::read_csv_arrow('sampledata.csv', > col_types=schema(time=time32())) > {code} > {code:r} > Error in csv___TableReader__Read(self) : > NotImplemented: CSV conversion to time32[ms] is not supported > {code} > The same error occurs when using compact string notation. > {code:r} > samp_arrow_string <- arrow::read_csv_arrow('sampledata.csv', col_types='DTc', > col_names=c('date', 'time', 'reading'), skip=1) > {code} > {code:r} > Error in csv___TableReader__Read(self) : > NotImplemented: CSV conversion to time32[ms] is not supported > {code} > This is something in the internals, so far beyond me to figure out a fix, but > I saw it in action and wanted to report it. -- This message was sent by Atlassian Jira (v8.3.4#803005)