데이터 분석 및 머신러닝
빅데이터는 기본적으로 Hadoop 시스템의 생태계, 즉 실제로는 Java 환경을 기반으로 구축됩니다. 많은 사람들이 데이터 분석을 위해 Python과 R을 사용하는 것을 좋아하지만 이는 종종 작은 데이터 문제나 로컬 데이터 처리 문제에 해당합니다. 이 둘을 어떻게 결합하여 더 큰 가치를 만들 수 있을까요? 기존 Hadoop 생태계와 기존 Python 환경이 위 그림에 나와 있습니다.
MaxCompute
MaxCompute는 오프라인 컴퓨팅을 위한 빅 데이터 플랫폼으로, TB/PB 수준의 데이터 처리, 멀티 테넌시, 즉시 사용 가능한 사용 및 격리 메커니즘을 제공하여 다음을 보장합니다. 보안. MaxCompute의 주요 분석 도구는 SQL입니다. SQL은 매우 간단하고 사용하기 쉬우며 설명적입니다. 터널은 SQL 엔진으로 예약할 필요 없이 데이터 업로드 및 다운로드 채널을 제공합니다.
Pandas
Pandas는 numpy 기반의 데이터 분석 도구입니다. 가장 중요한 구조는 일련의 그리기 API를 제공하는 DataFrame입니다. 그 뒤에는 matplotlib의 작업이 매우 쉽습니다. Python 제3자와 상호 작용합니다.
PyODPS 아키텍처
PyODPS는 빅데이터 분석을 위해 Python을 사용하며, 그 아키텍처는 위 그림과 같습니다. 맨 아래 계층은 MaxCompute에서 테이블, 함수 또는 리소스를 작동하는 데 사용할 수 있는 기본 API입니다. 위는 DataFrame 프레임워크입니다. DataFrame은 두 부분으로 구성됩니다. 한 부분은 사용자가 작성한 코드를 일반 언어와 동일한 표현식 트리로 변환하는 프런트 엔드입니다. 사용자는 기능을 사용자 정의하고, 타사 라이브러리를 시각화하고 상호 작용할 수 있습니다. 백엔드의 맨 아래에는 표현식 트리를 최적화하는 역할을 하는 최적화 프로그램이 있습니다. ODPS와 팬더는 모두 컴파일러와 분석기를 통해 실행되도록 엔진에 제출됩니다.
배경
DataFrame 프레임워크를 구축하는 이유
모든 빅데이터 분석 도구에는 3차원적인 문제가 있습니다. , API, 구문 및 프로그래밍 언어가 간단하고 직관적입니까? 데이터, 스토리지 및 메타데이터를 압축하고 효과적으로 사용할 수 있습니까? 그렇다면 팬더와 SQL이라는 두 가지 선택에 직면하게 됩니다.
위 그림에서 볼 수 있듯이 pandas는 표현력이 매우 뛰어나지만 해당 데이터는 메모리에만 배치할 수 있습니다. 엔진은 독립 실행형 기계이므로 제한이 있습니다. 기계의 성능. SQL의 표현력은 제한적이지만 대용량 데이터에는 사용할 수 있으며, 데이터량이 적으면 엔진의 장점이 없습니다. . ODPS의 목표는 두 가지 장점을 결합하는 것입니다.
PyODPS DataFrame
PyODPS DataFrame은 Python 언어로 작성되었으며, Python 변수, 조건 판단, 루프 등을 사용할 수 있습니다. 더 나은 표현력을 위해 팬더와 유사한 구문을 사용하여 고유한 프런트 엔드 세트를 정의할 수 있습니다. 백엔드는 방문자의 디자인 패턴이자 확장 가능한 데이터 소스를 기반으로 특정 실행 엔진을 결정할 수 있습니다. 전체 실행이 지연되어 사용자가 즉시 실행되는 메소드를 호출하지 않으면 직접 실행되지 않습니다.
위 그림에서 볼 수 있듯이 구문은 pandas와 매우 유사합니다.
표현식 및 추상 구문 트리
위 그림에서 볼 수 있듯이 사용자는 원본 Collection에서 GroupBy 작업을 수행한 후 열 선택을 수행합니다. . 작업, 하단은 소스 모음입니다. 두 개의 필드인 종(species)을 가져옵니다. 이 두 필드는 By 연산에 의해 수행되며, pental_length는 집계 연산에 사용되어 집계 값을 얻습니다. Species 필드는 직접 빼내고, 가장 짧은 필드에 1을 추가합니다.
Optimizer(작업 병합)
백엔드는 먼저 Optimizer를 사용하여 표현식 트리를 최적화하고 먼저 GroupBy를 수행한 다음 열 선택을 수행합니다. 병합 작업을 통해 집계 작업을 위해 꽃잎_길이를 제거하고, 하나를 추가하여 최종적으로 GroupBy 컬렉션을 구성할 수 있습니다.
옵티마이저(열 가지치기)
사용자가 두 개의 데이터 프레임을 조인한 후 데이터 프레임에서 두 개의 열을 검색할 때 빅데이터 환경에 제출하면 모든 열이 사용되지 않기 때문에 이러한 프로세스는 매우 비효율적입니다. 따라서 조인된 열은 정리되어야 합니다. 예를 들어 데이터 프레임1에서는 필드 하나만 사용하고 해당 필드를 가로채서 프로젝션을 만들어 새 컬렉션을 형성하면 됩니다. 이러한 방식으로 이 두 부분에 대한 검증 작업을 수행할 때 출력되는 데이터의 양을 크게 줄일 수 있습니다.
Optimizer(predicate push down)
두 개의 데이터 프레임을 결합한 후 별도로 필터링하는 경우 이 필터링 작업은 다음과 같이 푸시다운되어야 합니다. , 결합된 입력의 양을 줄일 수 있도록 합니다.
시각화
는 사용자 시각화를 용이하게 하기 위해 시각화()를 제공합니다. 오른쪽 예에서 볼 수 있듯이 ODSP SQL 백엔드는 SQL 실행으로 컴파일됩니다.
백엔드
위 그림에서 볼 수 있듯이 컴퓨팅 백엔드는 매우 유연합니다. 사용자는 Pandas 데이터 프레임을 결합하고 이전 테이블의 데이터를 최대 계산할 수도 있습니다.
Analyzer
Analyzer의 역할은 특정 백엔드에 대한 일부 작업을 변환하는 것입니다. 예:
value_counts와 같은 일부 작업은 pandas 자체에서 지원되므로 pandas 백엔드의 경우 ODPS SQL 백엔드에 대한 처리가 필요하지 않으며 수행할 직접적인 작업이 없으므로 다시 작성됩니다. 분석기가 실행될 때
ODPS SQL로 컴파일할 때 내장 함수가 이를 완료할 수 없으며 사용자 정의 함수로 다시 작성되는 연산자도 있습니다.
ODPS SQL 백엔드
ODPS SQL 백엔드는 어떻게 SQL 컴파일과 실행을 수행합니까? 컴파일러는 표현식 트리를 위에서 아래로 탐색할 수 있나요? 가입 또는 연합. 하위 프로세스의 경우 재귀적으로 컴파일합니다. 특정 실행을 위한 엔진의 경우 분석기를 사용하여 표현식 트리를 다시 작성하고, 하향식 하위 프로세스를 컴파일하고, 상향식 컴파일을 통해 SQL 절을 얻습니다. 제출되고 작업이 반환됩니다.
pandas 백엔드
먼저 표현식 트리에 액세스한 다음 각 표현식 트리 노드에 대한 pandas 작업에 해당합니다. 전체 표현식 트리를 순회하면 DAG가 형성됩니다. 엔진 실행은 DAG 토폴로지 순서에 따라 실행되며 이를 Pandas 작업에 지속적으로 적용하고 최종적으로 결과를 얻습니다. 빅 데이터 환경의 경우 pandas 백엔드의 역할은 로컬 DEBUG를 수행하는 것입니다. 데이터 양이 적을 경우 계산에 pandas를 사용할 수 있습니다.
어려움 + 함정
백엔드 컴파일 오류는 컨텍스트를 잃기 쉽고 여러 번의 최적화 및 분석 시간으로 인해 어떤 이전 방문 노드가 문제를 일으켰는지 찾기가 어렵습니다. 해결책: 각 모듈의 독립성을 보장하고 테스트를 완료하세요.
바이트코드 호환성 문제, maxcompute는 Python 2.7의 사용자 정의 함수 실행만 지원합니다.
SQL 실행 순서.
ML 머신러닝
머신러닝은 데이터 프레임의 입력과 출력입니다. 예를 들어 붓꽃 데이터 프레임이 있는 경우 먼저 이름 필드를 사용하여 분류 필드를 만들고, 분할 메서드를 호출하여 훈련 데이터 60%와 테스트 데이터 40%로 나눕니다. 그런 다음 의사 결정 트리가 포함된 RandomForests를 초기화하고, train 메서드를 호출하여 훈련 데이터를 훈련하고, 예측 메서드를 호출하여 예측 데이터를 형성하고, 세그먼트[0]을 호출하여 시각적 결과를 확인합니다.
향후 계획
분산형 numpy, DataFrame은 분산형 numpy 백엔드를 기반으로 합니다.
인메모리 컴퓨팅을 통해 대화형 경험을 향상합니다.
Tensorflow.