最近,Apache Spark社区发布了Spark 3.0的预览版,该预览版包含许多重要的新功能,这些功能将帮助Spark创造强大的影响力,在此大数据和数据科学时代,该产品已拥有广泛的企业用户和开发人员。
在新版本中,Spark社区已将一些功能从Spark SQL移植到了编程的Scala API(org.apache.spark.sql.functions),这鼓励开发人员直接将此功能用作其DataFrame转换的一部分,而不是直接输入 进入SQL模式或创建视图,并使用此函数以及SQL表达式或callUDF函数。
社区还辛苦地引入了一些新的数据转换功能和partition_transforms函数,这些功能在与Spark的新DataFrameWriterv2一起使用以将数据写到某些外部存储时非常有用。
Spark 3中的一些新功能已经是Databricks Spark以前版本的一部分。 因此,如果您在Databricks云中工作,您可能会发现其中一些熟悉的功能。
本文通篇介绍了Spark SQL和Scala API中用于DataFrame操作访问的Spark新功能,以及从Spark SQL移植到Scala API以进行编程访问的功能。
Spark SQL中的Spark 3.0中引入的功能以及用于DataFrame转换的功能
from_csv
像from_json一样,此函数解析包含CSV字符串的列,并将其转换为Struct类型。 如果CSV字符串不可解析,则将返回null。
例:
该函数需要一个Struct模式和一些选项,这些模式和选项指示如何解析CSV字符串。 选项与CSV数据源相同。
val studentInfo = "1,Jerin,CSE"::"2,Jerlin,ECE"::"3,Arun,CSE"::Nilval schema = new StructType() .add("Id",IntegerType) .add("Name",StringType) .add("Dept",StringType)val options = Map("delimiter" ->",")val studentDF = studentInfo.toDF("Student_Info").withColumn("csv_struct",from_csv('Student_Info, schema,options))studentDF.show()
to_csv
要将"结构类型"列转换为CSV字符串。
例:
与Struct type列一起,此函数还接受可选的options参数,该参数指示如何将Struct列转换为CSV字符串。
studentDF.withColumn("csv_string",to_csv($"csv_struct",Map.empty[String, String].asJava)).show
推断CSV字符串的模式,并以DDL格式返回模式。
例:
该函数需要一个CSV字符串列和一个可选参数,其中包含如何解析CSV字符串的选项。
studentDF .withColumn("schema",schema_of_csv("csv_string")) .show
for_all
将给定谓词应用于数组中的所有元素,并且仅当数组中的所有元素求值为true时返回true,否则返回false。
例:
检查给定Array列中的所有元素是否均是偶数。
val df = Seq(Seq(2,4,6),Seq(5,10,3)).toDF("int_array")df.withColumn("flag",forall($"int_array",(x:Column)=>(lit(x%2==0)))).show