Spark SQL - Hướng dẫn nhanh

Các ngành đang sử dụng rộng rãi Hadoop để phân tích tập dữ liệu của họ. Lý do là vì khung công tác Hadoop dựa trên một mô hình lập trình đơn giản (MapReduce) và nó cho phép một giải pháp tính toán có khả năng mở rộng, linh hoạt, chịu lỗi và hiệu quả về chi phí. Ở đây, mối quan tâm chính là duy trì tốc độ xử lý bộ dữ liệu lớn về thời gian chờ giữa các truy vấn và thời gian chờ để chạy chương trình.

Spark được Apache Software Foundation giới thiệu để tăng tốc quá trình phần mềm tính toán Hadoop.

Trái ngược với một niềm tin thông thường, Spark is not a modified version of Hadoopvà thực sự không phụ thuộc vào Hadoop vì nó có quản lý cụm riêng. Hadoop chỉ là một trong những cách để triển khai Spark.

Spark sử dụng Hadoop theo hai cách - một là storage và thứ hai là processing. Vì Spark có tính toán quản lý cụm riêng nên nó chỉ sử dụng Hadoop cho mục đích lưu trữ.

Apache Spark

Apache Spark là công nghệ điện toán cụm nhanh như chớp, được thiết kế để tính toán nhanh. Nó dựa trên Hadoop MapReduce và nó mở rộng mô hình MapReduce để sử dụng hiệu quả nó cho nhiều loại tính toán hơn, bao gồm các truy vấn tương tác và xử lý luồng. Tính năng chính của Spark làin-memory cluster computing làm tăng tốc độ xử lý của ứng dụng.

Spark được thiết kế để bao gồm một loạt các khối lượng công việc như ứng dụng hàng loạt, thuật toán lặp lại, truy vấn tương tác và phát trực tuyến. Ngoài việc hỗ trợ tất cả khối lượng công việc này trong một hệ thống tương ứng, nó làm giảm gánh nặng quản lý trong việc duy trì các công cụ riêng biệt.

Sự phát triển của Apache Spark

Spark là một trong những dự án con của Hadoop được phát triển vào năm 2009 trong AMPLab của UC Berkeley bởi Matei Zaharia. Nó được Open Sourced vào năm 2010 theo giấy phép BSD. Nó đã được quyên góp cho nền tảng phần mềm Apache vào năm 2013 và bây giờ Apache Spark đã trở thành một dự án Apache cấp cao nhất từ ​​tháng 2 năm 2014.

Các tính năng của Apache Spark

Apache Spark có các tính năng sau.

  • Speed- Spark giúp chạy một ứng dụng trong cụm Hadoop, nhanh hơn tới 100 lần trong bộ nhớ và nhanh hơn 10 lần khi chạy trên đĩa. Điều này có thể thực hiện được bằng cách giảm số lượng thao tác đọc / ghi vào đĩa. Nó lưu trữ dữ liệu xử lý trung gian trong bộ nhớ.

  • Supports multiple languages- Spark cung cấp các API tích hợp trong Java, Scala hoặc Python. Do đó, bạn có thể viết ứng dụng bằng các ngôn ngữ khác nhau. Spark đưa ra 80 toán tử cấp cao để truy vấn tương tác.

  • Advanced Analytics- Spark không chỉ hỗ trợ 'Bản đồ' và 'thu nhỏ'. Nó cũng hỗ trợ các truy vấn SQL, Dữ liệu truyền trực tuyến, Máy học (ML) và các thuật toán Đồ thị.

Spark được xây dựng trên Hadoop

Sơ đồ sau đây cho thấy ba cách về cách Spark có thể được tạo bằng các thành phần Hadoop.

Có ba cách triển khai Spark như được giải thích bên dưới.

  • Standalone- Việc triển khai Spark độc lập có nghĩa là Spark chiếm vị trí trên HDFS (Hệ thống tệp phân tán Hadoop) và không gian được phân bổ cho HDFS một cách rõ ràng. Ở đây, Spark và MapReduce sẽ chạy song song với nhau để bao gồm tất cả các công việc tia lửa trên cụm.

  • Hadoop Yarn- Việc triển khai Hadoop Yarn có nghĩa là đơn giản, spark chạy trên Yarn mà không cần cài đặt trước hoặc truy cập root. Nó giúp tích hợp Spark vào hệ sinh thái Hadoop hoặc ngăn xếp Hadoop. Nó cho phép các thành phần khác chạy trên ngăn xếp.

  • Spark in MapReduce (SIMR)- Spark trong MapReduce được sử dụng để khởi chạy công việc spark ngoài việc triển khai độc lập. Với SIMR, người dùng có thể khởi động Spark và sử dụng trình bao của nó mà không cần bất kỳ quyền truy cập quản trị nào.

Các thành phần của Spark

Hình minh họa sau đây mô tả các thành phần khác nhau của Spark.

Apache Spark Core

Spark Core là công cụ thực thi chung cơ bản cho nền tảng tia lửa mà tất cả các chức năng khác đều được xây dựng dựa trên. Nó cung cấp tính toán trong bộ nhớ và tham chiếu bộ dữ liệu trong hệ thống lưu trữ bên ngoài.

Spark SQL

Spark SQL là một thành phần nằm trên Spark Core giới thiệu một phần trừu tượng hóa dữ liệu mới được gọi là SchemaRDD, cung cấp hỗ trợ cho dữ liệu có cấu trúc và bán cấu trúc.

Spark Streaming

Spark Streaming tận dụng khả năng lập lịch nhanh chóng của Spark Core để thực hiện phân tích luồng. Nó nhập dữ liệu trong các lô nhỏ và thực hiện các phép biến đổi RDD (Tập dữ liệu phân tán có khả năng phục hồi) trên các lô dữ liệu nhỏ đó.

MLlib (Thư viện học máy)

MLlib là một khung công tác học máy phân tán ở trên Spark vì kiến ​​trúc Spark dựa trên bộ nhớ phân tán. Theo điểm chuẩn, nó được thực hiện bởi các nhà phát triển MLlib dựa trên việc triển khai Phương diện Ít nhất (ALS) luân phiên. Spark MLlib nhanh gấp 9 lần so với phiên bản dựa trên đĩa Hadoop củaApache Mahout (trước khi Mahout có được giao diện Spark).

GraphX

GraphX ​​là một khung xử lý đồ thị phân tán trên Spark. Nó cung cấp một API để thể hiện tính toán đồ thị có thể lập mô hình đồ thị do người dùng xác định bằng cách sử dụng API trừu tượng Pregel. Nó cũng cung cấp thời gian chạy được tối ưu hóa cho sự trừu tượng này.

Tập dữ liệu được phân phối có khả năng phục hồi

Tập dữ liệu phân tán có khả năng phục hồi (RDD) là một cấu trúc dữ liệu cơ bản của Spark. Nó là một tập hợp các đối tượng được phân phối bất biến. Mỗi tập dữ liệu trong RDD được chia thành các phân vùng logic, có thể được tính toán trên các nút khác nhau của cụm. RDD có thể chứa bất kỳ loại đối tượng Python, Java hoặc Scala nào, bao gồm các lớp do người dùng định nghĩa.

Về mặt hình thức, RDD là một tập hợp các bản ghi được phân vùng, chỉ đọc. RDD có thể được tạo thông qua các hoạt động xác định trên dữ liệu trên bộ lưu trữ ổn định hoặc các RDD khác. RDD là một tập hợp các phần tử chịu được lỗi có thể hoạt động song song.

Có hai cách để tạo RDD: parallelizing một bộ sưu tập hiện có trong chương trình trình điều khiển của bạn, hoặc referencing a dataset trong hệ thống lưu trữ bên ngoài, chẳng hạn như hệ thống tệp chia sẻ, HDFS, HBase hoặc bất kỳ nguồn dữ liệu nào cung cấp Định dạng đầu vào Hadoop.

Spark sử dụng khái niệm RDD để đạt được các hoạt động MapReduce nhanh hơn và hiệu quả hơn. Trước tiên, chúng ta hãy thảo luận về cách các hoạt động MapReduce diễn ra và tại sao chúng không hiệu quả như vậy.

Chia sẻ dữ liệu chậm trong MapReduce

MapReduce được sử dụng rộng rãi để xử lý và tạo các bộ dữ liệu lớn với một thuật toán phân tán, song song trên một cụm. Nó cho phép người dùng viết các phép tính song song, sử dụng một tập hợp các toán tử cấp cao, mà không phải lo lắng về việc phân phối công việc và khả năng chịu lỗi.

Thật không may, trong hầu hết các khuôn khổ hiện tại, cách duy nhất để sử dụng lại dữ liệu giữa các lần tính toán (Ví dụ: giữa hai công việc MapReduce) là ghi nó vào một hệ thống lưu trữ ổn định bên ngoài (Ví dụ: HDFS). Mặc dù khung công tác này cung cấp nhiều nội dung trừu tượng để truy cập tài nguyên tính toán của một cụm, người dùng vẫn muốn nhiều hơn thế.

Cả hai IterativeInteractivecác ứng dụng yêu cầu chia sẻ dữ liệu nhanh hơn trên các công việc song song. Chia sẻ dữ liệu chậm trong MapReduce doreplication, serializationdisk IO. Về hệ thống lưu trữ, hầu hết các ứng dụng Hadoop, chúng dành hơn 90% thời gian để thực hiện các thao tác đọc-ghi HDFS.

Các hoạt động lặp lại trên MapReduce

Sử dụng lại các kết quả trung gian qua nhiều lần tính toán trong các ứng dụng nhiều giai đoạn. Hình minh họa sau giải thích cách hoạt động của khung hiện tại trong khi thực hiện các hoạt động lặp lại trên MapReduce. Điều này phát sinh chi phí đáng kể do sao chép dữ liệu, I / O đĩa và tuần tự hóa, khiến hệ thống chậm.

Hoạt động tương tác trên MapReduce

Người dùng chạy các truy vấn đặc biệt trên cùng một tập con dữ liệu. Mỗi truy vấn sẽ thực hiện I / O đĩa trên bộ nhớ ổn định, điều này có thể chi phối thời gian thực thi ứng dụng.

Hình minh họa sau giải thích cách hoạt động của khung hiện tại khi thực hiện các truy vấn tương tác trên MapReduce.

Chia sẻ dữ liệu bằng Spark RDD

Chia sẻ dữ liệu chậm trong MapReduce do replication, serializationdisk IO. Hầu hết các ứng dụng Hadoop, chúng dành hơn 90% thời gian để thực hiện các thao tác đọc-ghi HDFS.

Nhận thức được vấn đề này, các nhà nghiên cứu đã phát triển một framework chuyên biệt có tên là Apache Spark. Ý tưởng chính của tia lửa làRkhông có lợi Dđược phân bổ Datasets (RDD); nó hỗ trợ tính toán xử lý trong bộ nhớ. Điều này có nghĩa là, nó lưu trữ trạng thái bộ nhớ như một đối tượng trên các công việc và đối tượng có thể chia sẻ giữa các công việc đó. Chia sẻ dữ liệu trong bộ nhớ nhanh hơn mạng và Đĩa từ 10 đến 100 lần.

Bây giờ chúng ta hãy thử tìm hiểu cách các hoạt động lặp lại và tương tác diễn ra trong Spark RDD.

Hoạt động lặp lại trên Spark RDD

Hình minh họa dưới đây cho thấy các hoạt động lặp lại trên Spark RDD. Nó sẽ lưu trữ các kết quả trung gian trong một bộ nhớ phân tán thay vì Ổ lưu trữ ổn định (Đĩa) và làm cho hệ thống nhanh hơn.

Note - Nếu bộ nhớ phân tán (RAM) đủ để lưu trữ các kết quả trung gian (Trạng thái công việc), thì nó sẽ lưu các kết quả đó trên đĩa

Hoạt động tương tác trên Spark RDD

Hình minh họa này cho thấy các hoạt động tương tác trên Spark RDD. Nếu các truy vấn khác nhau được chạy lặp lại trên cùng một tập dữ liệu, thì dữ liệu cụ thể này có thể được lưu trong bộ nhớ để có thời gian thực thi tốt hơn.

Theo mặc định, mỗi RDD đã chuyển đổi có thể được tính toán lại mỗi khi bạn chạy một hành động trên đó. Tuy nhiên, bạn cũng có thểpersistmột RDD trong bộ nhớ, trong trường hợp đó Spark sẽ giữ các phần tử xung quanh trên cụm để truy cập nhanh hơn nhiều, vào lần tiếp theo bạn truy vấn nó. Ngoài ra còn có hỗ trợ cho các RDD lâu dài trên đĩa hoặc được sao chép qua nhiều nút.

Spark là dự án con của Hadoop. Do đó, tốt hơn là cài đặt Spark vào một hệ thống dựa trên Linux. Các bước sau đây hướng dẫn cách cài đặt Apache Spark.

Bước 1: Xác minh cài đặt Java

Cài đặt Java là một trong những điều bắt buộc trong quá trình cài đặt Spark. Hãy thử lệnh sau để xác minh phiên bản JAVA.

$java -version

Nếu Java đã được cài đặt trên hệ thống của bạn, bạn sẽ thấy phản hồi sau:

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

Trong trường hợp bạn chưa cài đặt Java trên hệ thống của mình, hãy Cài đặt Java trước khi chuyển sang bước tiếp theo.

Bước 2: Xác minh cài đặt Scala

Bạn nên dùng ngôn ngữ Scala để triển khai Spark. Vì vậy, hãy để chúng tôi xác minh cài đặt Scala bằng lệnh sau.

$scala -version

Nếu Scala đã được cài đặt trên hệ thống của bạn, bạn sẽ thấy phản hồi sau:

Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

Trong trường hợp bạn chưa cài đặt Scala trên hệ thống của mình, hãy chuyển sang bước tiếp theo để cài đặt Scala.

Bước 3: Tải xuống Scala

Tải xuống phiên bản mới nhất của Scala bằng cách truy cập liên kết sau Tải xuống Scala . Đối với hướng dẫn này, chúng tôi đang sử dụng phiên bản scala-2.11.6. Sau khi tải xuống, bạn sẽ tìm thấy tệp tar Scala trong thư mục tải xuống.

Bước 4: Cài đặt Scala

Làm theo các bước dưới đây để cài đặt Scala.

Giải nén tệp tar Scala

Gõ lệnh sau để giải nén tệp tar Scala.

$ tar xvf scala-2.11.6.tgz

Di chuyển tệp phần mềm Scala

Sử dụng các lệnh sau để di chuyển các tệp phần mềm Scala, vào thư mục tương ứng (/usr/local/scala).

$ su –
Password:
# cd /home/Hadoop/Downloads/
# mv scala-2.11.6 /usr/local/scala
# exit

Đặt PATH cho Scala

Sử dụng lệnh sau để thiết lập PATH cho Scala.

$ export PATH = $PATH:/usr/local/scala/bin

Xác minh cài đặt Scala

Sau khi cài đặt, tốt hơn là xác minh nó. Sử dụng lệnh sau để xác minh cài đặt Scala.

$scala -version

Nếu Scala đã được cài đặt trên hệ thống của bạn, bạn sẽ thấy phản hồi sau:

Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

Bước 5: Tải xuống Apache Spark

Tải xuống phiên bản mới nhất của Spark bằng cách truy cập liên kết sau Tải xuống Spark . Đối với hướng dẫn này, chúng tôi đang sử dụngspark-1.3.1-bin-hadoop2.6phiên bản. Sau khi tải xuống, bạn sẽ tìm thấy tệp Spark tar trong thư mục tải xuống.

Bước 6: Cài đặt Spark

Làm theo các bước dưới đây để cài đặt Spark.

Giải nén nhựa đường Spark

Lệnh sau để giải nén tệp spark tar.

$ tar xvf spark-1.3.1-bin-hadoop2.6.tgz

Di chuyển tệp phần mềm Spark

Các lệnh sau để di chuyển các tệp phần mềm Spark vào thư mục tương ứng (/usr/local/spark).

$ su –
Password:
# cd /home/Hadoop/Downloads/
# mv spark-1.3.1-bin-hadoop2.6 /usr/local/spark
# exit

Thiết lập môi trường cho Spark

Thêm dòng sau vào ~/.bashrctập tin. Nó có nghĩa là thêm vị trí, nơi đặt tệp phần mềm tia lửa vào biến PATH.

export PATH = $PATH:/usr/local/spark/bin

Sử dụng lệnh sau để tìm nguồn cung cấp tệp ~ / .bashrc.

$ source ~/.bashrc

Bước 7: Xác minh cài đặt Spark

Viết lệnh sau để mở Spark shell.

$spark-shell

Nếu spark được cài đặt thành công thì bạn sẽ tìm thấy kết quả sau.

Spark assembly has been built with Hive, including Datanucleus jars on classpath
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/06/04 15:25:22 INFO SecurityManager: Changing view acls to: hadoop
15/06/04 15:25:22 INFO SecurityManager: Changing modify acls to: hadoop
disabled; ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)
15/06/04 15:25:22 INFO HttpServer: Starting HTTP Server
15/06/04 15:25:23 INFO Utils: Successfully started service 'HTTP class server' on port 43292.
Welcome to
    ____             __
   / __/__ ___ _____/ /__
   _\ \/ _ \/ _ `/ __/ '_/
   /___/ .__/\_,_/_/ /_/\_\ version 1.4.0
      /_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)
Type in expressions to have them evaluated.
Spark context available as sc
scala>

Spark giới thiệu một mô-đun lập trình để xử lý dữ liệu có cấu trúc được gọi là Spark SQL. Nó cung cấp một chương trình trừu tượng gọi là DataFrame và có thể hoạt động như một công cụ truy vấn SQL phân tán.

Các tính năng của Spark SQL

Sau đây là các tính năng của Spark SQL:

  • Integrated- Kết hợp liền mạch các truy vấn SQL với các chương trình Spark. Spark SQL cho phép bạn truy vấn dữ liệu có cấu trúc dưới dạng tập dữ liệu phân tán (RDD) trong Spark, với các API tích hợp bằng Python, Scala và Java. Sự tích hợp chặt chẽ này giúp bạn dễ dàng chạy các truy vấn SQL cùng với các thuật toán phân tích phức tạp.

  • Unified Data Access- Tải và truy vấn dữ liệu từ nhiều nguồn khác nhau. Schema-RDDs cung cấp một giao diện duy nhất để làm việc hiệu quả với dữ liệu có cấu trúc, bao gồm bảng Apache Hive, tệp parquet và tệp JSON.

  • Hive Compatibility- Chạy các truy vấn Hive chưa sửa đổi trên các kho hiện có. Spark SQL sử dụng lại giao diện người dùng Hive và MetaStore, mang lại cho bạn khả năng tương thích hoàn toàn với dữ liệu Hive, truy vấn và UDF hiện có. Chỉ cần cài đặt nó cùng với Hive.

  • Standard Connectivity- Kết nối thông qua JDBC hoặc ODBC. Spark SQL bao gồm một chế độ máy chủ với kết nối JDBC và ODBC tiêu chuẩn công nghiệp.

  • Scalability- Sử dụng cùng một công cụ cho cả truy vấn tương tác và truy vấn dài. Spark SQL tận dụng lợi thế của mô hình RDD để hỗ trợ khả năng chịu lỗi ở giữa truy vấn, cho phép nó mở rộng thành các công việc lớn. Đừng lo lắng về việc sử dụng một công cụ khác cho dữ liệu lịch sử.

Kiến trúc Spark SQL

Hình minh họa sau đây giải thích kiến ​​trúc của Spark SQL:

Kiến trúc này chứa ba lớp cụ thể là, API ngôn ngữ, lược đồ RDD và nguồn dữ liệu.

  • Language API- Spark tương thích với các ngôn ngữ khác nhau và Spark SQL. Nó cũng được hỗ trợ bởi các ngôn ngữ này- API (python, scala, java, HiveQL).

  • Schema RDD- Spark Core được thiết kế với cấu trúc dữ liệu đặc biệt gọi là RDD. Nói chung, Spark SQL hoạt động trên các lược đồ, bảng và bản ghi. Do đó, chúng ta có thể sử dụng Schema RDD làm bảng tạm thời. Chúng ta có thể gọi lược đồ RDD này là Khung dữ liệu.

  • Data Sources- Thông thường Nguồn dữ liệu cho spark-core là tệp văn bản, tệp Avro,… Tuy nhiên, Nguồn dữ liệu cho Spark SQL thì khác. Đó là tệp Parquet, tài liệu JSON, bảng HIVE và cơ sở dữ liệu Cassandra.

Chúng ta sẽ thảo luận thêm về những điều này trong các chương tiếp theo.

DataFrame là một tập hợp dữ liệu phân tán, được tổ chức thành các cột được đặt tên. Về mặt khái niệm, nó tương đương với các bảng quan hệ có kỹ thuật tối ưu hóa tốt.

Một DataFrame có thể được xây dựng từ một loạt các nguồn khác nhau như bảng Hive, tệp Dữ liệu có cấu trúc, cơ sở dữ liệu bên ngoài hoặc RDD hiện có. API này được thiết kế cho các ứng dụng Khoa học dữ liệu và Dữ liệu lớn hiện đại, lấy cảm hứng từDataFrame in R ProgrammingPandas in Python.

Các tính năng của DataFrame

Dưới đây là một số tính năng đặc trưng của DataFrame:

  • Khả năng xử lý dữ liệu có kích thước từ Kilobyte đến Petabyte trên một cụm nút đơn đến cụm lớn.

  • Hỗ trợ các định dạng dữ liệu khác nhau (Avro, csv, tìm kiếm đàn hồi và Cassandra) và hệ thống lưu trữ (HDFS, bảng HIVE, mysql, v.v.).

  • Tối ưu hóa hiện đại và tạo mã thông qua trình tối ưu hóa Spark SQL Catalyst (khung chuyển đổi cây).

  • Có thể dễ dàng tích hợp với tất cả các công cụ và khuôn khổ Dữ liệu lớn thông qua Spark-Core.

  • Cung cấp API cho Lập trình Python, Java, Scala và R.

SQLContext

SQLContext là một lớp và được sử dụng để khởi tạo các chức năng của Spark SQL. Đối tượng lớp SparkContext (sc) là bắt buộc để khởi tạo đối tượng lớp SQLContext.

Lệnh sau được sử dụng để khởi tạo SparkContext thông qua spark-shell.

$ spark-shell

Theo mặc định, đối tượng SparkContext được khởi tạo với tên sc khi vỏ tia lửa bắt đầu.

Sử dụng lệnh sau để tạo SQLContext.

scala> val sqlcontext = new org.apache.spark.sql.SQLContext(sc)

Thí dụ

Chúng ta hãy xem xét một ví dụ về hồ sơ nhân viên trong tệp JSON có tên employee.json. Sử dụng các lệnh sau để tạo DataFrame (df) và đọc tài liệu JSON có tênemployee.json với nội dung sau.

employee.json - Đặt tập tin này vào thư mục hiện tại scala> con trỏ được định vị.

{
   {"id" : "1201", "name" : "satish", "age" : "25"}
   {"id" : "1202", "name" : "krishna", "age" : "28"}
   {"id" : "1203", "name" : "amith", "age" : "39"}
   {"id" : "1204", "name" : "javed", "age" : "23"}
   {"id" : "1205", "name" : "prudvi", "age" : "23"}
}

Hoạt động DataFrame

DataFrame cung cấp một ngôn ngữ dành riêng cho miền để thao tác dữ liệu có cấu trúc. Ở đây, chúng tôi bao gồm một số ví dụ cơ bản về xử lý dữ liệu có cấu trúc bằng DataFrames.

Làm theo các bước dưới đây để thực hiện các hoạt động DataFrame -

Đọc tài liệu JSON

Đầu tiên, chúng ta phải đọc tài liệu JSON. Dựa trên điều này, tạo một DataFrame có tên (dfs).

Sử dụng lệnh sau để đọc tài liệu JSON có tên employee.json. Dữ liệu được hiển thị dưới dạng bảng với các trường - id, tên và tuổi.

scala> val dfs = sqlContext.read.json("employee.json")

Output - Tên trường được lấy tự động từ employee.json.

dfs: org.apache.spark.sql.DataFrame = [age: string, id: string, name: string]

Hiển thị dữ liệu

Nếu bạn muốn xem dữ liệu trong DataFrame, hãy sử dụng lệnh sau.

scala> dfs.show()

Output - Bạn có thể xem dữ liệu nhân viên ở định dạng bảng.

<console>:22, took 0.052610 s
+----+------+--------+
|age | id   |  name  |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith  |
| 23 | 1204 | javed  |
| 23 | 1205 | prudvi |
+----+------+--------+

Sử dụng phương pháp printSchema

Nếu bạn muốn xem Cấu trúc (Lược đồ) của DataFrame, hãy sử dụng lệnh sau.

scala> dfs.printSchema()

Output

root
   |-- age: string (nullable = true)
   |-- id: string (nullable = true)
   |-- name: string (nullable = true)

Sử dụng phương pháp chọn

Sử dụng lệnh sau để tìm nạp name-cột trong số ba cột từ DataFrame.

scala> dfs.select("name").show()

Output - Bạn có thể thấy các giá trị của name cột.

<console>:22, took 0.044023 s
+--------+
|  name  |
+--------+
| satish |
| krishna|
| amith  |
| javed  |
| prudvi |
+--------+

Sử dụng bộ lọc độ tuổi

Sử dụng lệnh sau để tìm nhân viên có tuổi lớn hơn 23 (tuổi> 23).

scala> dfs.filter(dfs("age") > 23).show()

Output

<console>:22, took 0.078670 s
+----+------+--------+
|age | id   | name   |
+----+------+--------+
| 25 | 1201 | satish |
| 28 | 1202 | krishna|
| 39 | 1203 | amith  |
+----+------+--------+

Sử dụng phương pháp groupBy

Sử dụng lệnh sau để đếm số lượng nhân viên ở cùng độ tuổi.

scala> dfs.groupBy("age").count().show()

Output - hai nhân viên 23 tuổi.

<console>:22, took 5.196091 s
+----+-----+
|age |count|
+----+-----+
| 23 |  2  |
| 25 |  1  |
| 28 |  1  |
| 39 |  1  |
+----+-----+

Chạy truy vấn SQL theo lập trình

Một SQLContext cho phép các ứng dụng chạy các truy vấn SQL theo chương trình trong khi chạy các hàm SQL và trả về kết quả dưới dạng DataFrame.

Nói chung, ở chế độ nền, SparkSQL hỗ trợ hai phương pháp khác nhau để chuyển đổi các RDD hiện có thành DataFrames -

Sơ không Phương pháp & Mô tả
1 Suy ra lược đồ bằng cách sử dụng Phản chiếu

Phương pháp này sử dụng sự phản chiếu để tạo ra lược đồ của một RDD có chứa các loại đối tượng cụ thể.

2 Chỉ định lược đồ theo chương trình

Phương pháp thứ hai để tạo DataFrame là thông qua giao diện lập trình cho phép bạn tạo một lược đồ và sau đó áp dụng nó cho một RDD hiện có.

Giao diện DataFrame cho phép các Nguồn dữ liệu khác nhau hoạt động trên Spark SQL. Nó là một bảng tạm thời và có thể hoạt động như một RDD bình thường. Đăng ký DataFrame dưới dạng bảng cho phép bạn chạy các truy vấn SQL trên dữ liệu của nó.

Trong chương này, chúng tôi sẽ mô tả các phương pháp chung để tải và lưu dữ liệu bằng các Nguồn dữ liệu Spark khác nhau. Sau đó, chúng tôi sẽ thảo luận chi tiết về các tùy chọn cụ thể có sẵn cho các nguồn dữ liệu tích hợp sẵn.

Có nhiều loại nguồn dữ liệu khác nhau có sẵn trong SparkSQL, một số trong số đó được liệt kê bên dưới -

Sơ không Nguồn dữ liệu
1 Bộ dữ liệu JSON

Spark SQL có thể tự động nắm bắt giản đồ của tập dữ liệu JSON và tải nó dưới dạng DataFrame.

2 Bàn Hive

Hive đi kèm với thư viện Spark là HiveContext, kế thừa từ SQLContext.

3 Tệp sàn gỗ

Sàn gỗ là một định dạng cột, được hỗ trợ bởi nhiều hệ thống xử lý dữ liệu.