Python spark sql函数有问题吗?
我试图从数据中得到产品的最高价格Python spark sql函数有问题吗?,python,apache-spark,pyspark,apache-spark-sql,spark-dataframe,Python,Apache Spark,Pyspark,Apache Spark Sql,Spark Dataframe,我试图从数据中得到产品的最高价格 from pyspark.sql import functions as func from pyspark.sql import Row rdd=sc.textFile("/mnt/my_s3_data/retail_db/products/").map(lambda x: x.split(',')) row_rdd=rdd.map(lambda o : Row(product_id=o[0],product_category_id=o[1],product_
from pyspark.sql import functions as func
from pyspark.sql import Row
rdd=sc.textFile("/mnt/my_s3_data/retail_db/products/").map(lambda x: x.split(','))
row_rdd=rdd.map(lambda o : Row(product_id=o[0],product_category_id=o[1],product_name=o[2],product_description=o[3],product_price=o[4],product_image=o[5]))
df=row_rdd.toDF()
df.select(func.max('product_price')).show()
结果:
999.99
预期结果结果:
1999.99
输出:
我得到的是1999.99的产品价格
注:
**如果我将数据帧限制为255条记录,我将获得预期的输出:
df.limit(255).agg({"product_price": "max"}).show()
由于product_id为string类型,因此max函数将执行字符串比较以查找最大值而不是数字比较,因此您得到了错误的结果,为避免此情况,您需要将类型强制转换为数字 下面是示例代码
val updatedDF= df.withColumn("product_id_num",expr("cast (product_id as
double)")).withColumnRenamed("product_id_num","product_id")
现在查找更新时的最大值如果您将得到准确的结果。因为产品id为字符串类型,max函数将执行字符串比较以查找最大值而不是数字比较,因此您得到了错误的结果。为避免此情况,您需要将类型强制转换为数字 下面是示例代码
val updatedDF= df.withColumn("product_id_num",expr("cast (product_id as
double)")).withColumnRenamed("product_id_num","product_id")
现在找到updatedDf上的最大值,您将得到准确的结果。它正在工作
newDF=df.filter(“产品价格!=”)
newDF.select(func.max(newDF.product\u price.cast(“double”)).alias(“maximum\u price”).show()
它正在工作
newDF=df.filter(“产品价格!=”)
newDF.select(func.max(newDF.product\u price.cast(“double”)).alias(“maximum\u price”).show()
我将该类型转换为double并尝试查找max(),但得到了ValueError:无法将字符串转换为float:。可能是product\u id包含一些字符串值,通常在scala中,这些值将转换为null,max将忽略它们。我正在python中尝试。如果尝试df.where(“product\u id”>某个\u编号),我会得到TypeError:条件应该是字符串或列。但是根据spark文档,我们可以使用“column_name”rite访问该列?我将类型转换为double,并尝试查找max(),但得到了ValueError:无法将字符串转换为float:。可能是product_id包含一些字符串值,通常在scala中,这些值将被转换为null,max将忽略它们。我正在python中尝试。如果尝试df.where(“product\u id”>某个\u编号),我会得到TypeError:条件应该是字符串或列。但是根据spark文档,我们可以使用“column_name”来访问该列?