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
'Programing' 카테고리의 다른 글
구문 강조로 인해 Vim에서 끔찍한 지연이 발생합니다. (0) | 2020.12.28 |
---|---|
intellij 아이디어에서 편집기 동작을 변경하는 방법 (0) | 2020.12.28 |
React Native에서 iOS 상태 표시 줄 배경색을 설정하는 방법은 무엇입니까? (0) | 2020.12.28 |
디자인 패턴이 솔루션 대신 문제가되는 경우는 언제입니까? (0) | 2020.12.28 |
numpy의 배열에서 연속 요소 그룹을 찾는 방법은 무엇입니까? (0) | 2020.12.28 |