Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python spark sql函数有问题吗?_Python_Apache Spark_Pyspark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

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”来访问该列?