Programing

PySpark의 테이블 데이터 프레임을 CSV로 내보내는 방법은 무엇입니까?

lottogame 2020. 12. 28. 07:42
반응형

PySpark의 테이블 데이터 프레임을 CSV로 내보내는 방법은 무엇입니까?


Spark 1.3.1 (PySpark)을 사용하고 있으며 SQL 쿼리를 사용하여 테이블을 생성했습니다. 이제 DataFrame. DataFrame객체 ( "테이블"이라고 부름)를 csv 파일로 내 보내서 조작하고 열을 플로팅하고 싶습니다. DataFrame"테이블"을 csv 파일로 내보내려면 어떻게합니까 ?

감사!


데이터 프레임이 드라이버 메모리에 맞고 로컬 파일 시스템에 저장하려면 메서드를 사용하여 Spark DataFrame 을 로컬 Pandas DataFrame으로 변환 toPandas한 다음 다음을 사용하면됩니다 to_csv.

df.toPandas().to_csv('mycsv.csv')

그렇지 않으면 spark-csv를 사용할 수 있습니다 .

  • Spark 1.3

    df.save('mycsv.csv', 'com.databricks.spark.csv')
    
  • Spark 1.4 이상

    df.write.format('com.databricks.spark.csv').save('mycsv.csv')
    

Spark 2.0 이상에서는 csv데이터 소스를 직접 사용할 수 있습니다.

df.write.csv('mycsv.csv')

Apache Spark 2+의 경우 데이터 프레임을 단일 csv 파일로 저장하기 위해. 다음 명령 사용

query.repartition(1).write.csv("cc_out.csv", sep='|')

여기 1에 csv 파티션이 하나만 필요함을 나타냅니다. 요구 사항에 따라 변경할 수 있습니다.


spark-csv를 사용할 수없는 경우 다음을 수행 할 수 있습니다.

df.rdd.map(lambda x: ",".join(map(str, x))).coalesce(1).saveAsTextFile("file.csv")

작동하지 않는 줄 바꿈이나 쉼표가있는 문자열을 처리해야하는 경우. 이것을 사용하십시오 :

import csv
import cStringIO

def row2csv(row):
    buffer = cStringIO.StringIO()
    writer = csv.writer(buffer)
    writer.writerow([str(s).encode("utf-8") for s in row])
    buffer.seek(0)
    return buffer.read().strip()

df.rdd.map(row2csv).coalesce(1).saveAsTextFile("file.csv")

데이터 프레임을 단일 파티션으로 다시 분할 한 다음 형식, 경로 및 기타 매개 변수를 Unix 파일 시스템 형식으로 파일에 정의해야합니다.

df.repartition(1).write.format('com.databricks.spark.csv').save("/path/to/file/myfile.csv",header = 'true')

파티션 기능 에 대해 자세히 알아보기 저장 기능에 대해 자세히 알아보기

그러나 repartition은 비용이 많이 드는 함수이며 toPandas ()는 최악입니다. 더 나은 성능을 위해 이전 구문에서 .repartition (1) 대신 .coalesce (1)을 사용해보십시오.

재분할 대 병합 함수 에 대해 자세히 알아보십시오 .


이건 어때요 (하나의 라이너를 원하지 않아요)?

for row in df.collect():
    d = row.asDict()
    s = "%d\t%s\t%s\n" % (d["int_column"], d["string_column"], d["string_column"])
    f.write(s)

f는 열린 파일 설명자입니다. 또한 구분 기호는 TAB 문자이지만 원하는대로 쉽게 변경할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/31385363/how-to-export-a-table-dataframe-in-pyspark-to-csv

반응형