TypeError dropDuplicates() 接受 1 到 2 个位置参数,但给出了 3 个
TypeError dropDuplicates() takes from 1 to 2 positional arguments but 3 were given
我在 Spark 2 中播放流数据。
我想用 dropDuplicates 方法复制记录。
我在 Spark 网站上发现我可以将 dropDuplicates
与 watermark
一起使用。
这是我的带水印的代码,没有 dropDuplicates
方法:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)
此代码有效。但是当我想像这样添加 dropDuplicates
时:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.dropDuplicates("id", "sourceTimeStamp") \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)
它抛出一个错误:TypeError: dropDuplicates() takes from 1 to 2 positional arguments but 3 were given
。
我不明白为什么会抛出这个错误。这种用法在 Spark 站点中也是如此。
这个错误的原因是什么?
您需要使用方括号在 dropDuplicates()
方法中声明多列。
像这样:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.dropDuplicates(["id", "sourceTimeStamp"]) \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)
我在 Spark 2 中播放流数据。
我想用 dropDuplicates 方法复制记录。
我在 Spark 网站上发现我可以将 dropDuplicates
与 watermark
一起使用。
这是我的带水印的代码,没有 dropDuplicates
方法:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)
此代码有效。但是当我想像这样添加 dropDuplicates
时:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.dropDuplicates("id", "sourceTimeStamp") \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)
它抛出一个错误:TypeError: dropDuplicates() takes from 1 to 2 positional arguments but 3 were given
。
我不明白为什么会抛出这个错误。这种用法在 Spark 站点中也是如此。 这个错误的原因是什么?
您需要使用方括号在 dropDuplicates()
方法中声明多列。
像这样:
parsed = parsed_opc \
.withWatermark("sourceTimeStamp", "10 minutes") \
.dropDuplicates(["id", "sourceTimeStamp"]) \
.groupBy(
window(parsed_opc.sourceTimeStamp, "4 seconds"),
parsed_opc.id
) \
.agg({"value": "avg"}) \
.withColumnRenamed("avg(value)", "avg")\
.orderBy("avg", ascending=True)