1

Je travaille avec l'ensemble de données csv accessible au public à partir MovieLens J'ai créé un ensemble de données partitionné pour le ratings.csv:comment importer correctement le jeu de données csv en utilisant le schéma partitionné kite-dataset?

kite-dataset create ratings --schema rating.avsc --partition-by year-month.json --format parquet 

Voici mon année month.json:

[ { 
    "name" : "year", 
    "source" : "timestamp", 
    "type" : "year" 
}, { 
    "name" : "month", 
    "source" : "timestamp", 
    "type" : "month" 
} ] 

Voici ma commande import csv:

mkite-dataset csv-import ratings.csv ratings 

Après l'importation terminée, j'ai couru cette commande pour voir si des partitions année et mois où en fait créé:

hadoop fs -ls /user/hive/warehouse/ratings/ 

Ce que j'ai remarqué, est que seule une seule partition de l'année a été créé, et à l'intérieur de celui-ci une partition unique de mois a été créé:

[[email protected] ml-20m]$ hadoop fs -ls /user/hive/warehouse/ratings/ 
Found 3 items 
drwxr-xr-x - cloudera supergroup   0 2016-06-12 18:49 /user/hive/warehouse/ratings/.metadata 
drwxr-xr-x - cloudera supergroup   0 2016-06-12 18:59 /user/hive/warehouse/ratings/.signals 
drwxrwxrwx - cloudera supergroup   0 2016-06-12 18:59 /user/hive/warehouse/ratings/year=1970 

[[email protected] ml-20m]$ hadoop fs -ls /user/hive/warehouse/ratings/year=1970/ 
Found 1 items 
drwxrwxrwx - cloudera supergroup   0 2016-06-12 18:59 /user/hive/warehouse/ratings/year=1970/month=01 

Quelle est la la bonne façon d'effectuer une telle importation partitionnée, ce qui entraînerait la création de toutes les années et toutes les partitions mois?

Répondre

0

Ajoutez trois zéros à la fin pour l'horodatage.

Utilisez le script shell ci-dessous pour le faire

#!/bin/bash 

# add the CSV header to both files 
head -n 1 ratings.csv > ratings_1.csv 
head -n 1 ratings.csv > ratings_2.csv 

# output the first 10,000,000 rows to ratings_1.csv 
# this includes the header, and uses tail to remove it 
head -n 10000001 ratings.csv | tail -n +2 | awk '{print "000" $1 }' >> ratings_1.csv 

    enter code here 

# output the rest of the file to ratings_2.csv 
# this starts at the line after the ratings_1 file stopped 
tail -n +10000002 ratings.csv | awk '{print "000" $1 }' >> ratings_2.csv 

Même j'ai eu ce problème, et il a été résolu après avoir ajouté 3 zéros.