Scala 如何在spark数据框架中通过列获取配对,如python pandas?
你好~我是spark的新手。我想在dataframe中获得一个列的对,col中的每个项(“all_mv_id”)让其他项组成这样的对:Scala 如何在spark数据框架中通过列获取配对,如python pandas?,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,你好~我是spark的新手。我想在dataframe中获得一个列的对,col中的每个项(“all_mv_id”)让其他项组成这样的对: # generate data ids = [('all_mv_id', ['131', '121', '2223', '123412', '3982', '54281'])] df = pd.DataFrame.from_items(ids) all_mv_id = list(df.all_mv_id) temp_container = [] for i i
# generate data
ids = [('all_mv_id', ['131', '121', '2223', '123412', '3982', '54281'])]
df = pd.DataFrame.from_items(ids)
all_mv_id = list(df.all_mv_id)
temp_container = []
for i in range(len(all_mv_id)):
for j in range(i+1,len(all_mv_id)):
temp_container.append([all_mv_id[i],all_mv_id[j]])
df_1 = pd.DataFrame(temp_container)
df_1.columns = ["id_1", "id_2"]
之前:
+---------+
|all_mv_id|
+---------+
| 131|
| 121|
| 2223|
| 123412|
| 3982|
+---------+
之后:
+------+------+
| id_1| id_2|
+------+------+
| 131| 121|
| 131| 2223|
| 131|123412|
| 131| 3982|
| 131| 54281|
| 121| 2223|
| 121|123412|
| 121| 3982|
| 121| 54281|
| 2223|123412|
| 2223| 3982|
| 2223| 54281|
|123412| 3982|
|123412| 54281|
| 3982| 54281|
+------+------+
我的意思是,在python熊猫中,我会这样做:
# generate data
ids = [('all_mv_id', ['131', '121', '2223', '123412', '3982', '54281'])]
df = pd.DataFrame.from_items(ids)
all_mv_id = list(df.all_mv_id)
temp_container = []
for i in range(len(all_mv_id)):
for j in range(i+1,len(all_mv_id)):
temp_container.append([all_mv_id[i],all_mv_id[j]])
df_1 = pd.DataFrame(temp_container)
df_1.columns = ["id_1", "id_2"]
但是如何将pandas中的python转换为spark数据框架中的scala呢?
我尝试了
ListBuffer
,但似乎无法将其附加到元组中。我想带条件left.id
的常规自连接应该可以完成以下工作:
val df=List(“131”、“121”、“2223”、“123412”、“3982”).toDF(“id”)
df.as(“左”)
.join(df.as(“right”),$“left.id”<$“right.id”)
。选择($“left.id”作为“id_1”,$“right.id”作为“id_2”)
显示
结果:
+------+------+
| id_1| id_2|
+------+------+
| 131| 2223|
| 131| 3982|
| 131| 54281|
| 121| 131|
| 121| 2223|
| 121|123412|
| 121| 3982|
| 121| 54281|
| 2223| 3982|
| 2223| 54281|
|123412| 131|
|123412| 2223|
|123412| 3982|
|123412| 54281|
| 3982| 54281|
+------+------+
我想,条件为
left.id
的常规自连接应该可以完成以下工作:
val df=List(“131”、“121”、“2223”、“123412”、“3982”).toDF(“id”)
df.as(“左”)
.join(df.as(“right”),$“left.id”<$“right.id”)
。选择($“left.id”作为“id_1”,$“right.id”作为“id_2”)
显示
结果:
+------+------+
| id_1| id_2|
+------+------+
| 131| 2223|
| 131| 3982|
| 131| 54281|
| 121| 131|
| 121| 2223|
| 121|123412|
| 121| 3982|
| 121| 54281|
| 2223| 3982|
| 2223| 54281|
|123412| 131|
|123412| 2223|
|123412| 3982|
|123412| 54281|
| 3982| 54281|
+------+------+
非常感谢你~~我收到了~谢谢~@konverse如果你觉得这个网站很有帮助,你可以接受:)对不起~我试过了~但是系统显示“谢谢你的反馈!那些声誉低于15的人投的票会被记录下来,但不会改变公开显示的帖子分数。”o(╥﹏╥)o@konverse在“向上投票”按钮下方,有一个“勾选”按钮可以接受答案。如果你接受它,你还将获得两个声望点:)非常感谢~~我知道了~谢谢~@konverse如果你觉得这个答案很有帮助,你可以接受:)对不起~我尝试了~但系统显示“谢谢你的反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。”(╥﹏╥)o@konverse在“向上投票”按钮下方,有一个勾选按钮,用于接受答案。如果您接受,您还将获得两个信誉点:)