PySpark Как читать CSV в Dataframe и манипулировать им
Я новичок в pyspark и пытаюсь использовать его для обработки большого набора данных, который сохраняется в виде файла csv. Я хотел бы прочитать CSV-файл в искровом фрейме данных, удалить некоторые столбцы и добавить новые столбцы. Как мне это сделать?
У меня проблемы с переносом этих данных в информационный фрейм. Это урезанная версия того, что я имею до сих пор:
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()
Это выдает ошибкуTypeError: 'JavaPackage' object is not callable
на этапе уменьшения.
Можно ли сделать это? Идея сокращения до фрейма данных заключается в том, чтобы иметь возможность записать полученные данные в базу данных (Redshift, используя пакет spark-redshift).
Я также пытался использоватьunionAll()
, а такжеmap()
сpartial()
но не могу заставить его работать.
Я запускаю это на EMR Amazon, сspark-redshift_2.10:2.0.0
и драйвер JDBC AmazonRedshiftJDBC41-1.1.17.1017.jar
.