Size: a a a

R (язык программирования)

2020 October 11

А

Александр in R (язык программирования)
Артём Клевцов
Довольно странное утверждение. Хотелось бы более конкретных объяснение, а то «мужики то не знают».
я решал как раз такую задачу. Нужно было парсить сжатые гигабайты реддита. И вот R никак это делать не хотела, но из консоли все полетело
источник

АК

Артём Клевцов... in R (язык программирования)
@semenoffalex есть совсем консольный jq. zcat | jq <expr> > outfile.
источник

AS

Alexander Semenov in R (язык программирования)
Артём Клевцов
Да, вполне себе. Если есть возможность скинь кусок файла и реузльтат, который нужен.
Речь про goodreads_interactions_mystery_thriller_crime.json.gz  вот отсюда: https://sites.google.com/eng.ucsd.edu/ucsdbookgraph/home. Хочу через GloVe себе рекомендашку запилить, а то читать совсем нечего.
источник

А

Александр in R (язык программирования)
Alexander Semenov
Я в прошлый раз писал, что петон на этой задаче отвалился уже через 5 минут.
не призываю к питону
источник

АК

Артём Клевцов... in R (язык программирования)
Александр
я решал как раз такую задачу. Нужно было парсить сжатые гигабайты реддита. И вот R никак это делать не хотела, но из консоли все полетело
Имею другой опыт на похоже задаче. Так что, возможно, дело вовсе на «экре».
источник

AS

Alexander Semenov in R (язык программирования)
Alexander Semenov
Речь про goodreads_interactions_mystery_thriller_crime.json.gz  вот отсюда: https://sites.google.com/eng.ucsd.edu/ucsdbookgraph/home. Хочу через GloVe себе рекомендашку запилить, а то читать совсем нечего.
Что-то мне подсказывает, что те же данные в *.csv считаются в fread за минуту.
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander Semenov
Речь про goodreads_interactions_mystery_thriller_crime.json.gz  вот отсюда: https://sites.google.com/eng.ucsd.edu/ucsdbookgraph/home. Хочу через GloVe себе рекомендашку запилить, а то читать совсем нечего.
А на выходе чего надо?
источник

AS

Alexander Semenov in R (язык программирования)
Да ровно то же, но в *.csv. Ну или только user_id, book_id, timestamp.
источник

ЕТ

Евгений Томилов... in R (язык программирования)
Marina Varfolomeeva 🐾 Varmarrra
@EugeneTomilov  disabled until a newer version of RStudio is installed - отключена до тех пор пока не будет установлена более новая версия RStudio
@baikulov При чем здесь версия R? Сейчас на сайте RStudio последняя версия 1.3.1093
Английский сломался.
источник

MV

Marina Varfolomeeva ... in R (язык программирования)
Евгений Томилов
Английский сломался.
#wizard
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander Semenov
Да ровно то же, но в *.csv. Ну или только user_id, book_id, timestamp.
Примерный вариант перегонки нужных полей в CSV.
library(jsonlite)
library(data.table)

in_file <- "Downloads/goodreads_books.json.gz"
book_out_file <- "Downloads/goodreads_books.csv.gz"
author_out_file <- "Downloads/goodreads_authors.csv.gz"
unlink(book_out_file)
unlink(author_out_file)

book_handler <- function(entry) {
 res <- list(
   book_id = entry[["book_id"]],
   work_id = entry[["work_id"]],
   title = entry[["title"]],
   publication_year = entry[["publication_year"]],
   num_pages = entry[["num_pages"]],
   publisher = entry[["publisher"]]
 )
 fwrite(
   x = res,
   file = book_out_file,
   append = TRUE,
   sep = ",",
   na = ""
 )
}
stream_in(gzfile(in_file), book_handler, 1000)

author_handler <- function(entry) {
 res <- entry[["authors"]]
 res <- setNames(res, entry[["book_id"]])
 res <- rbindlist(res, idcol = "book_id")
 fwrite(
   x = res,
   file = author_out_file,
   append = TRUE,
   sep = ",",
   na = ""
 )
}
stream_in(gzfile(in_file), author_handler, 1000)
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander Semenov
Да ровно то же, но в *.csv. Ну или только user_id, book_id, timestamp.
Чтобы писать в память.
за пределами хэндлера
e <- new.env()
внутри хэндлера:
e[[entry[["book_id"]]]] <- entry
После окончания процесса:
rbindlist(e. fill = TRUE)
источник

AS

Alexander Semenov in R (язык программирования)
Божечки-кошечки! Спасибо, буду пробовать.
источник

АК

Артём Клевцов... in R (язык программирования)
Alexander Semenov
Божечки-кошечки! Спасибо, буду пробовать.
zcat "Downloads/goodreads_books.json.gz" | head | jq -r '[.book_id, .work_id, .title] | @csv'
"5333265","5400751","W.C. Fields: A Life on Film"
"1333909","1323437","Good Harbor"
"7327624","8948723","The Unschooled Wizard (Sun Wolf and Starhawk, #1-2)"
"6066819","6243154","Best Friends Forever"
"287140","278577","Runic Astrology: Starcraft and Timekeeping in the Northern Tradition"
"287141","278578","The Aeneid for Boys and Girls"
"378460","368291","The Wanting of Levine"
"6066812","701117","All's Fairy in Love and War (Avalon: Web of Magic, #8)"
"34883016","56135087","Playmaker: A Venom Series Novella"
"287149","278586","The Devil's Notebook"
источник

АК

Артём Клевцов... in R (язык программирования)
Артём Клевцов
zcat "Downloads/goodreads_books.json.gz" | head | jq -r '[.book_id, .work_id, .title] | @csv'
"5333265","5400751","W.C. Fields: A Life on Film"
"1333909","1323437","Good Harbor"
"7327624","8948723","The Unschooled Wizard (Sun Wolf and Starhawk, #1-2)"
"6066819","6243154","Best Friends Forever"
"287140","278577","Runic Astrology: Starcraft and Timekeeping in the Northern Tradition"
"287141","278578","The Aeneid for Boys and Girls"
"378460","368291","The Wanting of Levine"
"6066812","701117","All's Fairy in Love and War (Avalon: Web of Magic, #8)"
"34883016","56135087","Playmaker: A Venom Series Novella"
"287149","278586","The Devil's Notebook"
zcat "Downloads/goodreads_books.json.gz" | head | jq -r '[(.book_id), (.authors | map(.author_id) | join("|"))] | @csv'
"5333265","604031"
"1333909","626222"
"7327624","10333"
"6066819","9212"
"287140","149918"
"287141","3041852"
"378460","215594"
"6066812","19158"
"34883016","5807700"
"287149","2983296|40075"
источник

АК

Артём Клевцов... in R (язык программирования)
Да, для jq есть пакет jqr, где можно использовать что-то вроде:
library(jsonlite)
library(jqr)

x <- gzfile(in_file) %>%
 jq("{book_id, work_id, title}") %>%
 combine() %>%
 fromJSON()
str(x)
# 'data.frame':  2360655 obs. of  3 variables:
#  $ book_id: chr  "5333265" "1333909" "7327624" "6066819" ...
#  $ work_id: chr  "5400751" "1323437" "8948723" "6243154" ...
#  $ title  : chr  "W.C. Fields: A Life on Film" "Good Harbor" "The Unschooled Wizard (Sun Wolf and Starhawk, #1-2)" "Best Friends Forever" ...

Читать ман jq рекомендуется.
Такая конструкция позволяет на лету отбирать поля, фильтровать, сортировать и на выходе получать R-объект. Требования к памяти, разумеется, будут выше.
источник

AS

Alexander Semenov in R (язык программирования)
Спасибо! Думаю, что предыдущий вариант быстро отработал. Через пару часов проверю.
источник

АК

Артём Клевцов... in R (язык программирования)
По возможности файлик на SSD положи, если сейчас это не так.
источник

AS

Alexander Semenov in R (язык программирования)
Блин, и вправду на HDD лежал =(
источник

AS

Alexander Semenov in R (язык программирования)
Alexander Semenov
Спасибо! Думаю, что предыдущий вариант быстро отработал. Через пару часов проверю.
В 14:06 всё было готово, а запустил скрипт я примерно в 13:25.
источник