Saltar al contenido

¿Cómo leer solo n filas de un archivo CSV grande en HDFS usando el paquete spark-csv?

Solución:

Puedes usar limit(n).

sqlContext.format('com.databricks.spark.csv') 
          .options(header="true", inferschema="true").load("file_path").limit(20)

Esto solo cargará 20 filas.

Tengo entendido que leer solo unas pocas líneas no es compatible con el módulo spark-csv directamente, y como un solución alterna podría simplemente leer el archivo como un archivo de texto, tomar tantas líneas como desee y guardarlo en una ubicación temporal. Con las líneas guardadas, puede usar spark-csv para leer las líneas, incluyendo inferSchema opción (que puede que desee utilizar dado que está en modo de exploración).

val numberOfLines = ...
spark.
  read.
  text("myfile.csv").
  limit(numberOfLines).
  write.
  text(s"myfile-$numberOfLines.csv")
val justFewLines = spark.
  read.
  option("inferSchema", true). // <-- you are in exploration mode, aren't you?
  csv(s"myfile-$numberOfLines.csv")

No inferir esquema y usar limit(n) funcionó para mí, en todos los aspectos.

f_schema = StructType([
StructField("col1",LongType(),True),
StructField("col2",IntegerType(),True),
StructField("col3",DoubleType(),True)
...
])

df_n = sqlContext.read.format('com.databricks.spark.csv').options(header="true").schema(f_schema).load(data_path).limit(10)

Nota: Si usamos inferschema="true", es nuevamente la misma hora, y tal vez por lo tanto lo mismo de siempre.

Pero si no tenemos idea del esquema, las soluciones de Jacek Laskowski también funcionan bien. 🙂

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *