Python 我们可以在数据帧的每一行上使用spark sql函数吗?

Python 我们可以在数据帧的每一行上使用spark sql函数吗?,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我们可以在数据帧的每一行上使用SQL函数吗? 例如: 如果我们想在dataframe的行上应用If内置的spark SQL函数,有什么方法可以做到吗 不包括IF,但可以通过条件运算符实现。 示例代码显示了如何映射rdd并对每个值应用spark sql条件运算符 from pyspark.sql import SparkSession from pyspark.sql.types import StructType, StringType, IntegerType, StructField, Bo

我们可以在数据帧的每一行上使用SQL函数吗? 例如: 如果我们想在dataframe的行上应用If内置的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())
输出

 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]

你能提供一些代码并解释到目前为止你做了什么吗?你能再详细说明一下这个问题吗?原因是-即使您在SQL查询中使用
if
函数,它也会应用于每一行。是的,我们可以这样做,但我想使用不同的SQL函数,如to_date、Concat等。我想对行而不是数据框使用spark SQL操作。spark SQL确实有
if
。阅读