web-dev-qa-db-fra.com

Comment analyser un csv qui utilise ^ A (c'est-à-dire \ 001) comme délimiteur avec spark-csv?

Terriblement nouveau pour spark and Hive and big data and scala and all. J'essaie d'écrire une fonction simple qui prend un sqlContext, charge un fichier csv de s3 et retourne un DataFrame. Le problème est que ce csv particulier utilise le caractère ^ A (ie\001) comme délimiteur et le jeu de données est énorme donc je ne peux pas simplement faire un "s/\ 001 /,/g" En outre, les champs peuvent contenir des virgules ou d'autres caractères que je pourrais utiliser comme délimiteur.

Je sais que le paquet spark-csv que j'utilise a une option de délimiteur, mais je ne sais pas comment le définir pour qu'il lise\001 comme un caractère et non quelque chose comme un 0, 0 et 1 échappé. Peut-être que je devrais utiliser hiveContext ou quelque chose?

11
Norsul Ronsul

Si vous consultez la page GitHub, il existe un paramètre delimiter pour spark-csv (comme vous l'avez également noté). Utilisez-le comme ceci:

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "true") // Use first line of all files as header
    .option("inferSchema", "true") // Automatically infer data types
    .option("delimiter", "\u0001")
    .load("cars.csv")
22
Daniel Zolnai

Avec Spark 2.x et l'API CSV, utilisez l'option sep:

val df = spark.read
  .option("sep", "\u0001")
  .csv("path_to_csv_files")
1
Mark Rajcok