我正在处理两个pyspark数据帧,并对它们进行左-反连接以跟踪日常变化,然后发送电子邮件。
我第一次尝试:
diff = Table_a.join(
Table_b,
[Table_a.col1== Table_b.col1, Table_a.col2== Table_b.col2],
how='left_anti'
)
预期输出是一个不包含任何数据的pyspark数据框。
此差异数据帧从Table_a获取其架构。 我第一次运行它时,没有显示与模式表示相同的数据。下次再抛出SparkException:
Exception thrown in Future.get
答案 0 :(得分:3)
我使用Scala,但是根据我的经验,当基础表之一发生某种更改时,会发生这种情况。我的建议是尝试简单地运行
display(Table_a)
和display(Table_b)
,然后查看其中任何命令是否失败。这应该给您有关问题出在哪里的提示。
无论如何,为了有效解决该问题,我的建议是清除正在运行的缓存
%sql
REFRESH my_schema.table_a
REFRESH my_schema.table_b
然后重新定义这些变量,如
Table_a = spark.table("my_schema.table_a")
Table_b = spark.table("my_schema.table_b")
这对我有用-希望它也对您有帮助。
答案 1 :(得分:0)
谢谢@Lucas Lima。每次创建新表时,我都会在pyspark中使用以下命令清除缓存:
class changeDrinkTypeInterface: WKInterfaceController {
@IBOutlet weak var drinkPicker: WKInterfacePicker!
@IBOutlet weak var ConfirmNewDrink: WKInterfaceButton!
var itemList: [(String, String)] = [
("Item 1", "Coffee"),
("Item 2", "Energy Drink"),
("Item 3", "Water"),
("Item 4", "Soft Drink")
]
override func awake(withContext context: Any?) {
super.awake(withContext: context)
let pickerItems: [WKPickerItem] = itemList.map {
let pickerItem = WKPickerItem()
pickerItem.caption = $0.0
pickerItem.title = $0.1
return pickerItem
}
self.drinkPicker.setItems(pickerItems)
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
// Configure interface objects here.
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
}
希望信息会有所帮助。
答案 2 :(得分:0)