PySpark Cómo leer CSV en Dataframe y manipularlo

Soy bastante nuevo en pyspark y estoy tratando de usarlo para procesar un gran conjunto de datos que se guarda como un archivo csv. Me gustaría leer el archivo CSV en el marco de datos de chispa, soltar algunas columnas y agregar nuevas columnas. ¿Cómo debo hacer eso?

Tengo problemas para obtener estos datos en un marco de datos. Esta es una versión simplificada de lo que tengo hasta ahora:

def make_dataframe(data_portion, schema, sql):
    fields = data_portion.split(",")
    return sql.createDateFrame([(fields[0], fields[1])], schema=schema)

if __name__ == "__main__":
    sc = SparkContext(appName="Test")
    sql = SQLContext(sc)

    ...

    big_frame = data.flatMap(lambda line: make_dataframe(line, schema, sql))
                .reduce(lambda a, b: a.union(b))

    big_frame.write \
        .format("com.databricks.spark.redshift") \
        .option("url", "jdbc:redshift://<...>") \
        .option("dbtable", "my_table_copy") \
        .option("tempdir", "s3n://path/for/temp/data") \
        .mode("append") \
        .save()

    sc.stop()

Esto produce un errorTypeError: 'JavaPackage' object is not callable en el paso de reducción.

¿Es posible hacer esto? La idea de reducir a un marco de datos es poder escribir los datos resultantes en una base de datos (Redshift, usando el paquete spark-redshift).

También he intentado usarunionAll()ymap() conpartial() pero no puedo hacer que funcione.

Estoy ejecutando esto en EMR de Amazon, conspark-redshift_2.10:2.0.0y el controlador JDBC de AmazonRedshiftJDBC41-1.1.17.1017.jar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta