我想在a中添加一个DataFrame具有任意值的列(对于每一行都是相同的).我使用时出现错误withColumn如下:
dt.withColumn('new_column', 10).head(5)
Run Code Online (Sandbox Code Playgroud)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-50-a6d0257ca2be> in <module>()
1 dt = (messages
2 .select(messages.fromuserid, messages.messagetype, floor(messages.datetime/(1000*60*5)).alias("dt")))
----> 3 dt.withColumn('new_column', 10).head(5)
/Users/evanzamir/spark-1.4.1/python/pyspark/sql/dataframe.pyc in withColumn(self, colName, col)
1166 [Row(age=2, name=u'Alice', age2=4), Row(age=5, name=u'Bob', age2=7)]
1167 """
-> 1168 return self.select('*', col.alias(colName))
1169
1170 @ignore_unicode_prefix
AttributeError: 'int' object has no attribute 'alias'
Run Code Online (Sandbox Code Playgroud)
似乎我可以通过添加和减去其中一个列(因此它们添加到零)然后添加我想要的数字(在这种情况下为10)来欺骗函数按照我想要的方式工作:
dt.withColumn('new_column', dt.messagetype - dt.messagetype + 10).head(5)
Run Code Online (Sandbox Code Playgroud)
[Row(fromuserid=425, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=47019141, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=49746356, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=93506471, messagetype=1, dt=4809600.0, …Run Code Online (Sandbox Code Playgroud) 我有一个非常大的pyspark.sql.dataframe.DataFrame,名为df.我需要一些枚举记录的方法 - 因此,能够访问具有特定索引的记录.(或选择索引范围的记录组)
在熊猫中,我可以做到
indexes=[2,3,6,7]
df[indexes]
Run Code Online (Sandbox Code Playgroud)
在这里,我想要类似的东西,(并且不将数据帧转换为pandas)
我能得到的最接近的是:
通过以下方式枚举原始数据框中的所有对象:
indexes=np.arange(df.count())
df_indexed=df.withColumn('index', indexes)
Run Code Online (Sandbox Code Playgroud)
问题:
它会在以后工作,如下所示:
indexes=[2,3,6,7]
df1.where("index in indexes").collect()
Run Code Online (Sandbox Code Playgroud)有没有更快更简单的方法来处理它?
我有一个要汇总的列名列表
columns = ['col1','col2','col3']
Run Code Online (Sandbox Code Playgroud)
如何添加这三个并将其放入新列中?(以自动方式,以便我可以更改列列表并获得新结果)
带有我想要的结果的数据框:
col1 col2 col3 result
1 2 3 6
Run Code Online (Sandbox Code Playgroud)
谢谢 !
我在pyspark下面的示例中有一个数据框.我想复制数据框中的列并重命名为另一个列名.
Name Age Rate
Aira 23 90
Ben 32 98
Cat 27 95
Run Code Online (Sandbox Code Playgroud)
期望的输出是:
Name Age Rate Rate2
Aira 23 90 90
Ben 32 98 98
Cat 27 95 95
Run Code Online (Sandbox Code Playgroud)
我该怎么做?