我在spark中使用sqlcontext进行了一次转换,但我只想使用spark数据帧编写相同的查询。此查询包括join操作和SQL的case语句。 sql查询编写如下:
refereshLandingData=spark.sql( "select a.Sale_ID, a.Product_ID,"
"CASE "
"WHEN (a.Quantity_Sold IS NULL) THEN b.Quantity_Sold "
"ELSE a.Quantity_Sold "
"END AS Quantity_Sold, "
"CASE "
"WHEN (a.Vendor_ID IS NULL) THEN b.Vendor_ID "
"ELSE a.Vendor_ID "
"END AS Vendor_ID, "
"a.Sale_Date, a.Sale_Amount, a.Sale_Currency "
"from landingData a left outer join preHoldData b on a.Sale_ID = b.Sale_ID" )
现在我想要scala和python中spark数据帧中的等价代码。我尝试了一些代码,但它是
不工作。我尝试的代码如下:
joinDf=landingData.join(preHoldData,landingData['Sale_ID']==preHoldData['Sale_ID'],'left_outer')
joinDf.withColumn\
('QuantitySold',pf.when(pf.col(landingData('Quantity_Sold')).isNull(),pf.col(preHoldData('Quantity_Sold')))
.otherwise(pf.when(pf.col(preHoldData('Quantity_Sold')).isNull())),
pf.col(landingData('Quantity_Sold'))).show()
在上述代码中,连接完成得很好,但情况不正常。 我得到-->;TypeError:“DataFrame”对象不可调用 我在spark scala中使用spark 2.3.2版本和python 3.7以及类似的scala 2.11 请任何人向我推荐任何等效代码或指南
下面是一个scala解决方案: 假设
landingData
和preHoldData
是您的数据帧您可以对供应商id执行相同的操作
代码的问题是,在
withColumn
操作中无法引用其他/旧数据帧名称。它必须来自您正在操作的数据帧下面的代码将在scala&;对于python,您可以稍微调整一下
相关问题 更多 >
编程相关推荐