U-SQL과 Spark 데이터 형식 간의 차이점 이해
중요
Azure Data Lake Analytics 2024년 2월 29일에 사용 중지되었습니다. 이 공지 사항을 통해 자세히 알아봅니다.
데이터 분석의 경우 organization Azure Synapse Analytics 또는 Microsoft Fabric을 사용할 수 있습니다.
Azure Databricks 또는 Azure HDInsight Spark를 사용하려면 Azure Data Lake Storage Gen1에서 Azure Data Lake Storage Gen2로 데이터를 마이그레이션하는 것이 좋습니다.
파일을 이동하는 것 외에도 U-SQL 테이블에 저장된 데이터를 Spark에서 액세스할 수 있도록 만들려고 합니다.
Azure Data Lake Storage Gen1에 저장된 데이터 이동
파일에 저장된 데이터는 다음과 같은 여러 가지 방법으로 이동할 수 있습니다.
- Azure Data Lake Storage Gen1 계정에서 Azure Data Lake Storage Gen2 계정으로 데이터를 복사하는 Azure Data Factory 파이프라인을 작성합니다.
- Azure Data Lake Storage Gen1 계정에서 데이터를 읽어 Azure Data Lake Storage Gen2 계정에 쓰는 Spark 작업을 작성합니다. 사용 사례에 따라 원래 파일 형식을 유지할 필요가 없는 경우 Parquet과 같은 다른 형식으로 작성할 수 있습니다.
빅 데이터 분석 솔루션을 Azure Data Lake Storage Gen1에서 Azure Data Lake Storage Gen2로 업그레이드 문서를 검토하는 것이 좋습니다.
U-SQL 테이블에 저장된 데이터 이동
U-SQL 테이블은 Spark에서 이해할 수 없습니다. SQL 테이블에 저장된 데이터가 있는 경우 테이블 데이터를 추출하고 Spark에서 인식하는 형식으로 저장하는 U-SQL 작업을 실행합니다. 가장 적절한 형식은 Hive 메타스토어의 폴더 레이아웃에 따라 Parquet 파일 세트를 만드는 것입니다.
출력은 기본 제공 Parquet 출력자에서 U-SQL로 얻을 수 있으며 파일 세트와 함께 동적 출력 분할을 사용하여 파티션 폴더를 만듭니다. Parquet을 사용하여 이전보다 많은 파일 처리에서는 이러한 Spark 사용 가능 데이터를 만드는 방법을 예를 들어 설명합니다.
변환 후에는 Azure Data Lake Storage Gen1 파일에 저장된 데이터 이동 장에서 설명하는 대로 데이터를 복사합니다.
제한 사항
데이터 의미 체계. 파일을 복사할 때 복사본은 바이트 수준에서 수행됩니다. 따라서 동일한 데이터가 Azure Data Lake Storage Gen2 계정에 표시되어야 합니다. 그러나 Spark는 일부 문자를 다르게 해석할 수 있습니다. 예를 들어 CSV 파일의 행 구분 기호에 대해 다른 기본값을 사용할 수 있습니다. 또한 테이블에서 형식화된 데이터를 복사하는 경우 Parquet과 Spark는 형식화된 값(예: 부동) 중 일부에 대해 다른 전체 자릿수와 소수 자릿수를 가질 수 있으며 null 값을 다르게 처리할 수 있습니다. 예를 들어, U-SQL은 null 값에 대해 C# 의미 체계를 사용하지만 Spark는 null 값에 대해 값이 3개인 논리를 사용합니다.
데이터 구성(분할). U-SQL 테이블은 두 가지 수준 분할을 제공합니다. 외부 수준(
PARTITIONED BY
)은 값을 기준으로 하며 대부분은 폴더 계층 구조를 사용하여 Hive/Spark 파티션 구성표로 매핑됩니다. null 값이 올바른 폴더에 매핑되었는지 확인해야 합니다. U-SQL의 내부 수준(DISTRIBUTED BY
)은 라운드 로빈, 범위, 해시 및 직접 해시의 네 가지 배포 체계를 제공합니다. Hive/Spark 테이블은 U-SQL과 다른 해시 함수를 사용하여 값 분할 또는 해시 분할만 지원합니다. U-SQL 테이블 데이터를 출력하는 경우 Spark의 값 분할에만 매핑할 수 있으며 최종 Spark 쿼리에 따라 데이터 레이아웃을 추가로 조정해야 할 수 있습니다.