我有多个重复列(由于联接),如果我试图通过别名调用它们,就会得到一个不明确的引用错误:
引用'customers_id‘是模糊的,可以是: customers_id#13,customers_id#85,customers_id#130
是否有一种方法可以根据Dataframe中的顺序或数字ID (而不是别名)引用中的列?净化后的名称表明列确实指定了一个id (在下面的示例中是13,85,130 )
稍后编辑:
我发现我可以通过它所在的原始数据引用特定列。但是,虽然我可以在select函数中使用OriginalDataframe.customer_id,但withColumnRename函数只接受字符串别名,因此不能在最终的dataframe中重命名重复的列。
因此,我想最终的问题是:是否有一种方法来引用具有重复别名的列,该列适用于所有需要字符串别名作为参数的函数?
稍后编辑2:
重命名似乎是通过添加一个新列并删除其中一个当前列来实现的:
joined_dataframe = joined_dataframe.withColumn("renamed_customers_id", original_dataframe("customers_id")).drop(original_dataframe("customers_id"))但是,我想保留我的问题:
是否有一种方法可以引用具有重复别名(所以,使用别名以外的其他东西)的列,以便所有期望字符串别名的函数都接受它?
发布于 2016-09-30 09:37:46
摆脱这种情况的一种方法是使用旧的rdd创建一个新的Dataframe,但是使用一个新的模式,您可以根据自己的意愿命名每一列。当然,这要求您显式地描述整个模式,包括每个列的类型。只要您提供的新模式与旧的Dataframe的列数和列类型相匹配,这就应该有效。
例如,从具有两个名为type的列的Dataframe开始,我们可以将它们重命名为type1和type2
df.show()
// +---+----+----+
// | id|type|type|
// +---+----+----+
// | 1| AAA| aaa|
// | 1| BBB| bbb|
// +---+----+----+
val newDF = sqlContext.createDataFrame(df.rdd, new StructType()
.add("id", IntegerType)
.add("type1", StringType)
.add("type2", StringType)
)
newDF.show()
// +---+-----+-----+
// | id|type1|type2|
// +---+-----+-----+
// | 1| AAA| aaa|
// | 1| BBB| bbb|
// +---+-----+-----+ 发布于 2017-04-19 06:01:15
主要问题是连接,ı使用python。
h1.createOrReplaceTempView("h1")
h2.createOrReplaceTempView("h2")
h3.createOrReplaceTempView("h3")
joined1 = h1.join(h2, (h1.A == h2.A) & (h1.B == h2.B) & (h1.C == h2.C), 'inner') 结果数据栏:
A B Column1 Column2 A B Column3 ...我不喜欢这样,但是join必须这样实现:
joined1 = h1.join(h2, [*argv], 'inner')我们假定argv = "A“、"B”、"C“
结果栏:
A B column1 column2 column3 ...https://stackoverflow.com/questions/39788034
复制相似问题