شرارة 3.0: ميزات وأمثلة جديدة على استخدامها - الجزء 1

لدينا برنامج جديد "أباتشي سبارك للمهندسين البيانات" و الويبينار على ملعب يوم 2 ديسمبر، قمنا بإعداد ترجمة للمقال نظرة عامة حول سبارك 3.0.

جاء Spark 3.0 بمجموعة كاملة من التحسينات المهمة ، بما في ذلك: تحسين الأداء مع ADQ ، وقراءة الثنائيات ، وتحسين دعم SQL و Python ، و Python 3.0 ، وتكامل Hadoop 3 ، ودعم ACID. 

في هذه المقالة ، حاول المؤلف إعطاء أمثلة على استخدام هذه الوظائف الجديدة. هذه هي المقالة الأولى حول وظيفة Spark 3.0 ومن المقرر أن تستمر سلسلة المقالات هذه.

تسلط هذه المقالة الضوء على الميزات التالية في Spark 3.0:

  • إطار تنفيذ الاستعلام التكيفي (AQE)

  • دعم للغات جديدة

  • واجهة جديدة للبث المنظم

  • قراءة الملفات الثنائية

  • التصفح المتكرر للمجلد

  • دعم محدد البيانات المتعدد (||)

  • ميزات سبارك المدمجة الجديدة

  • قم بالتبديل إلى التقويم الميلادي Proleptic

  • ذيل إطار البيانات

  • وظيفة إعادة التقسيم في استعلامات SQL

  • التوافق المحسن ANSI SQL

(AQE) – , , Spark 3.0. , , .

3.0 Spark , , Spark , . AQE , , , .  

, (AQE) . spark.sql.adaptive.enabled  true. AQE, Spark TPC-DS Spark 2.4 

AQE Spark 3.0 3 :

  • ,

  • join sort-merge broadcast  

Spark 3.0 , : 

  • Python3 (Python 2.x)

  • Scala 2.12

  • JDK 11

Hadoop 3 , Kafka 2.4.1 .

Spark Structured Streaming

web- Spark . , , , -, . , .

2 :

  •  

: Databricks

«Active Streaming Queries» , «Completed Streaming Queries» –

Run ID : , , , , , . , Databricks.

 

Spark 3.0 “binaryFile”, .

binaryFile, DataFrameReader image, pdf, zip, gzip, tar . , .  

val df = spark.read.format("binaryFile").load("/tmp/binary/spark.png")

df.printSchema()

df.show()

root

 |-- path: string (nullable = true)

 |-- modificationTime: timestamp (nullable = true)

 |-- length: long (nullable = true)

 |-- content: binary (nullable = true) 

+--------------------+--------------------+------+--------------------+

|                path|    modificationTime|length|             content|

+--------------------+--------------------+------+--------------------+

|file:/C:/tmp/bina…|2020-07-25 10:11:…| 74675|[89 50 4E 47 0D 0...|

+--------------------+--------------------+------+--------------------+

Spark 3.0  recursiveFileLookup, . true  , DataFrameReader , .

spark.read.option("recursiveFileLookup", "true").csv("/path/to/folder")

 

Spark 3.0 (||) CSV . , CSV :

 col1||col2||col3||col4

val1||val2||val3||val4

val1||val2||val3||val4

:

 val df  = spark.read

      .option("delimiter","||")

      .option("header","true")

      .csv("/tmp/data/douplepipedata.csv")

Spark 2.x , . :

 throws java.lang.IllegalArgumentException: Delimiter cannot be more than one character: ||

Spark

Spark SQL, Spark . 

sinh,cosh,tanh,asinh,acosh,atanh,any,bitand,bitor,bitcount,bitxor,

booland,boolor,countif,datepart,extract,forall,fromcsv,

makedate,makeinterval,maketimestamp,mapentries

mapfilter,mapzipwith,maxby,minby,schemaofcsv,tocsv

transformkeys,transform_values,typeof,version

xxhash64

 

Spark : 1582 , – .

JDK 7 java.sql.Date API. JDK 8 java.time.LocalDate API

Spark 3.0 , Pandas, R Apache Arrow. 15 1582 ., Date&Timestamp, Spark 3.0, . , 15 1582 .

Spark 3.0 Date & Timestamp : 

makedate(), maketimestamp(), makeinterval(). 

makedate(year, month, day) – <>, <> <>. 

makedate(2014, 8, 13)

//returns 2014-08-13.

maketimestamp(year, month, day, hour, min, sec[, timezone]) – Timestamp <>, <>, <>, <>, <>, < >. 

maketimestamp(2014, 8, 13, 1,10,40.147)

//returns Timestamp 2014-08-13 1:10:40.147

maketimestamp(2014, 8, 13, 1,10,40.147,CET)

makeinterval(years, months, weeks, days, hours, mins, secs)   

 makedate()  make_timestam()  0.

DataFrame.tail() 

Spark head(), , tail(), Pandas Python. Spark 3.0 tail() . tail() scala.Array[T]  Scala. 

 

val data=spark.range(1,100).toDF("num").tail(5)

data.foreach(print)

//Returns

//[95][96][97][98][99]

repartition SQL

SQL Spark actions,   Dataset/DataFrame, , Spark SQL repartition() . SQL-. . 

 

val df=spark.range(1,10000).toDF("num")

println("Before re-partition :"+df.rdd.getNumPartitions)

df.createOrReplaceTempView("RANGE¨C17CTABLE")

println("After re-partition :"+df2.rdd.getNumPartitions)

//Returns 

//Before re-partition :1

//After re-partition :20

ANSI SQL 

Spark data-, ANSI SQL, Spark 3.0 . , true  spark.sql.parser.ansi.enabled Spark .


Newprolab Apache Spark:

Apache Spark - (Scala). 11 , 5 .

Apache Spark (Python). " ". 6 , 5 .




All Articles