我们将讨论Pyspark--一种可以处理PB级数据的重要数据处理技术,PySpark When Otherwise,以及PySpark When中的SQL Case。
什么是PySpark?
Spark是一个通用的、内存中的、分布式的处理引擎,它允许你在几台机器上有效地处理数据。你可以开发Spark应用程序来处理数据,并使用PySpark在Spark平台上运行它们。AWS提供管理的EMR和Spark平台。你可以使用PySpark来处理数据并在AWS上建立一个EMR集群。PySpark可以从各种文件格式读取数据,包括CSV、parquet、json和数据库。因为Spark主要是用Scala实现的,所以用Scala或Java创建Spark应用比用Python或R编写Spark程序可以获得更多的功能。 例如,PySpark目前不支持Dataset。如果你要做数据科学,PySpark是比Scala更好的选择,因为有很多流行的数据科学库是用Python写的,如NumPy、TensorFlow和Scikit-learn。
PySpark的 "当 "和 "否则"
PySpark中的 "否则 "和 "当",以及与DataFrame一起工作的SQL Case "当" PySpark,像SQL和其他编程语言一样,有一个按顺序检查多个条件的机制,并在第一个条件满足时使用SQL的case和**when()返回一个值。Otherwise()**表达式在功能上类似于 "Switch "和 "if-then-else "语句。
PySpark的When Otherwise- when()是一个SQL函数,返回一个Column类型, otherwise()是一个Column函数,产生None/NULL,如果 otherwise()没有被使用。
PySpark中的SQL案例 When- 这类似于一个SQL表达式,它的使用方法如下。如果条件1为真,则结果为真,反之亦然。
例子1
import org.apache.spark.sql.functions.when
val df = Seq(
("A B","2019-01-19"),
("A A", "2019-01-10"),
("B F", "2019-01-15"),
("B E", "2019-01-30"),
("C B", "2019-01-22"),
("D O", "2019-01-30"),
("E U", "2019-01-22")
df.withColumn("ends_with_B",when($"word".endsWith("B"),true).otherwise(false))
例2
import org.apache.spark.sql.functions.{element_at,split,when}
val df = Seq(
("BA","human"),
("AB", "human"),
("E_bot", "bot"),
("D_bot", "bot"),
("TT", "human"),
("A_bot", "bot"),
("C_bot", "bot")
).toDF("user", "type")
df.withColumn("isBot", when($"user".endsWith("bot"), element_at(split($"user","_"),1)))
总结
我们讨论了PySpark,PySpark When,PySpark Otherwise,以及PySpark When中的SQL Case,这些都是用来检查多个条件并返回条件后的第一个元素,同时还有一些例子。