archivo de texto de ancho fijo pyspark parse

Tratando de analizar un archivo de texto de ancho fijo.

mi archivo de texto es similar al siguiente y necesito un ID de fila, una fecha, una cadena y un entero:

00101292017you1234 00201302017 me5678 

Puedo leer el archivo de texto a un RDD usando sc.textFile (ruta). Puedo crear DataFrame con un RDD analizado y un esquema. Es el análisis entre esos dos pasos.

La función substr de Spark puede manejar columnas de ancho fijo, por ejemplo:

 df = spark.read.text("/tmp/sample.txt") df.select( df.value.substr(1,3).alias('id'), df.value.substr(4,8).alias('date'), df.value.substr(12,3).alias('string'), df.value.substr(15,4).cast('integer').alias('integer') ).show() 

resultará en:

 +---+--------+------+-------+ | id| date|string|integer| +---+--------+------+-------+ |001|01292017| you| 1234| |002|01302017| me| 5678| +---+--------+------+-------+ 

Una vez divididas las columnas, puede reformatearlas y usarlas como en el dataframe normal de chispa.

Quiero automatizar este proceso ya que la cantidad de columnas será diferente para diferentes archivos

 df.value.substr(1,3).alias('id'), df.value.substr(4,8).alias('date'), df.value.substr(12,3).alias('string'), df.value.substr(15,4).cast('integer').alias('integer') 

df.select("my automated string").show una función de Python para generar esto en base al archivo de esquema, pero ahora cuando lo estoy agregando con df.select("my automated string").show que está lanzando una excepción de análisis de error