Python 如何在pyspark Hive SQL中获取postgres命令的“n_值”等效项?

Python 如何在pyspark Hive SQL中获取postgres命令的“n_值”等效项?,python,postgresql,apache-spark,pyspark,window-functions,Python,Postgresql,Apache Spark,Pyspark,Window Functions,我正在解决这个例子: 在这里,他们使用Oracle或postgres命令n_值来获得答案,但这并没有在pyspark使用的Hive SQL中实现,我想知道如何在pyspark中获得相同的结果 postgres sql代码 所有大于第四个的权重都指定为第四个最小权重 前三个最轻权重的赋值为99.9 选择名称、重量、, 聚结值重量,按重量计算超过订单4,按重量计算为99.9 来自猫 按重量订购 问题:如何使用pyspark获得以下结果? 数据 将numpy作为np导入 作为pd进口熊猫 进口Pypa

我正在解决这个例子: 在这里,他们使用Oracle或postgres命令n_值来获得答案,但这并没有在pyspark使用的Hive SQL中实现,我想知道如何在pyspark中获得相同的结果

postgres sql代码 所有大于第四个的权重都指定为第四个最小权重 前三个最轻权重的赋值为99.9 选择名称、重量、, 聚结值重量,按重量计算超过订单4,按重量计算为99.9 来自猫 按重量订购 问题:如何使用pyspark获得以下结果? 数据 将numpy作为np导入 作为pd进口熊猫 进口Pypark 从pyspark.sql.types导入* 从pyspark.sql导入函数为F 从pyspark.sql.window导入窗口 从pyspark导入SparkConf、SparkContext、SQLContext spark=pyspark.sql.SparkSession.builder.appName'app.getOrCreate sc=spark.sparkContext sqlContext=SQLContextsc sqc=sqlContext spark_df=sqlContext.createDataFramepandas_df df=pd.DataFrame{ “姓名”:[ “莫莉”、“灰烬”、“菲利克斯”、“斯玛奇”、“跳跳虎”、“阿尔菲”、“奥斯卡”, “米莉”、“米丝蒂”、“猫咪”、“斯莫奇”、“查理” ], “品种”:[ “波斯语”、“波斯语”、“波斯语”、“英国短发”, “英国短发”、“暹罗人”、“暹罗人”、“缅因州浣熊”、“缅因州浣熊”, “缅因库恩”,“缅因库恩”,“英国短发” ], “重量”:[4.2,4.5,5.0,4.9,3.8,5.5,6.1,5.4,5.7,5.1,6.1,4.8], “颜色”:[ ‘黑色’、‘黑色’、‘龟甲’、‘黑色’、‘龟甲’、‘棕色’, “黑色”、“玳瑁”、“棕色”、“玳瑁”、“棕色”、“黑色” ], ‘年龄’:[1,5,2,4,2,5,1,5,2,2,4,4] } schema=StructType[ StructField'name',StringType,True, StructField'breed',StringType,True, StructField'weight',双重类型,True, StructField'color',StringType,True, StructField'age',IntegerType,True, ] sdf=sqlContext.createDataFramedf,架构 sdf.createOrReplaceTempViewcats spark.sql'select*from cats limit 2'。显示 我迄今为止的努力 我的尝试 q= 从中选择权重 选择名称、重量、, 按重量排序的行号为行号 从猫组按重量,名称 物件 其中res.row_no=4 spark.sqlq.show 另一个选项是行数和条件窗口函数:

select
    name,
    weight,
    coalesce(
        max(case when rn = 4 then weight end) over(order by rn),
        99.9
    ) imagined_weight
from (select c.*, row_number() over(order by weight) rn from cats c) c
select
    name,
    weight,
    coalesce(
        max(case when rn = 4 then weight end) over(order by rn),
        99.9
    ) imagined_weight
from (select c.*, row_number() over(order by weight) rn from cats c) c