Можем ли мы использовать функцию spark sql в каждой строке кадра данных? - PullRequest
0 голосов
/ 23 сентября 2019

Можем ли мы использовать функцию SQL в каждой строке кадра данных?Например: если мы хотим применить встроенную функцию Spark SQL IF в строке кадра данных, есть ли способ сделать это?

1 Ответ

0 голосов
/ 23 сентября 2019

Spark SQL, встроенные функции не включая IF, но есть способы сделать это с помощью условных операторов.В примере кода показано, как отобразить на rdd и применить условные операторы spark sql к каждому значению

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StringType, IntegerType, StructField, BooleanType    

spark = SparkSession.builder.appName("Python Spark").getOrCreate()

data_sample = [[1, "r1", True], [2, "r2", False], [3, "r3", True], [4, "r4", False]]
data_schema = [StructField("id", IntegerType(), True), StructField("row", StringType(), True),
               StructField("con", BooleanType(), True)]
data_frame = spark.createDataFrame(spark.sparkContext.parallelize(data_sample), StructType(data_schema))

result1 = data_frame.rdd.map(lambda r: r[0] > 1 and r[1] == "r2")
result2 = data_frame.rdd.map(lambda r: r[0] >= 1 and r[1] == "r2" and r[2])

print(result1.collect())
print(result2.collect())

output

 Picked up _JAVA_OPTIONS: -Xmx1024M
 Setting default log level to "WARN".
 To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
 [False, True, False, False]
 [False, False, False, False]
...