我有一个python列表,比如l
l = [1,5,8]
Run Code Online (Sandbox Code Playgroud)
我想编写一个sql查询来获取列表中所有元素的数据
select name from students where id = |IN THE LIST l|
Run Code Online (Sandbox Code Playgroud)
我该如何做到这一点?
我在python/pyspark中有一个带有列的数据框id time city zip等等......
现在我name在这个数据框中添加了一个新列.
现在,我必须以这样的方式排列列,以便name列出来id
我在下面做了
change_cols = ['id', 'name']
cols = ([col for col in change_cols if col in df]
+ [col for col in df if col not in change_cols])
df = df[cols]
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误
pyspark.sql.utils.AnalysisException: u"Reference 'id' is ambiguous, could be: id#609, id#1224.;"
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误.我怎样才能纠正这个问题.
这可能是最容易通过示例解释的.假设我有一个用户登录网站的DataFrame,例如:
scala> df.show(5)
+----------------+----------+
| user_name|login_date|
+----------------+----------+
|SirChillingtonIV|2012-01-04|
|Booooooo99900098|2012-01-04|
|Booooooo99900098|2012-01-06|
| OprahWinfreyJr|2012-01-10|
|SirChillingtonIV|2012-01-11|
+----------------+----------+
only showing top 5 rows
Run Code Online (Sandbox Code Playgroud)
我想在此列添加一个列,指示他们何时成为网站上的活跃用户.但有一点需要注意:有一段时间用户被认为是活动的,在此期间之后,如果他们再次登录,他们的became_active日期会重置.假设这段时间是5天.然后从上表派生的所需表将是这样的:
+----------------+----------+-------------+
| user_name|login_date|became_active|
+----------------+----------+-------------+
|SirChillingtonIV|2012-01-04| 2012-01-04|
|Booooooo99900098|2012-01-04| 2012-01-04|
|Booooooo99900098|2012-01-06| 2012-01-04|
| OprahWinfreyJr|2012-01-10| 2012-01-10|
|SirChillingtonIV|2012-01-11| 2012-01-11|
+----------------+----------+-------------+
Run Code Online (Sandbox Code Playgroud)
因此,特别是,SirChillingtonIV的became_active日期被重置,因为他们的第二次登录是在活动期过期之后,但是Booooooo99900098的became_active日期没有在他/她登录的第二次重置,因为它落在活动期间.
我最初的想法是使用窗口函数lag,然后使用lagged值填充became_active列; 例如,大致类似于:
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._
val window = Window.partitionBy("user_name").orderBy("login_date")
val df2 = df.withColumn("tmp", lag("login_date", 1).over(window))
Run Code Online (Sandbox Code Playgroud)
然后,规则填写became_active日期会是这样,如果tmp是null(即,如果它是第一次登录),或者如果login_date - tmp >= 5再 …
我有一个数据框pyspark.在这个数据框中,我有一个名称id是唯一的列.
现在我想在数据框中找到maximum列的值id.
我尝试过如下
df['id'].max()
Run Code Online (Sandbox Code Playgroud)
但得到以下错误
TypeError: 'Column' object is not callable
Run Code Online (Sandbox Code Playgroud)
请告诉我如何maximum在数据框中查找列的值
在@Dadep的回答中,链接给出了正确的答案
我在pyspark中有一个有15列的数据框.
列名是id,name,emp.dno,emp.sal,state,emp.city,zip.....
现在我想,以取代有列名'.'在他们'_'
像'emp.dno'到'emp_dno'
我想动态地做
我如何在pyspark实现这一目标?
我有一个数据框Pyspark.在这个数据框中,我有一个timestamp数据类型的列.现在,我想为timestamp列的每一行添加额外的2小时,而不创建任何新列.
例如:这是样本数据
df
id testing_time test_name
1 2017-03-12 03:19:58 Raising
2 2017-03-12 03:21:30 sleeping
3 2017-03-12 03:29:40 walking
4 2017-03-12 03:31:23 talking
5 2017-03-12 04:19:47 eating
6 2017-03-12 04:33:51 working
Run Code Online (Sandbox Code Playgroud)
我想要有类似下面的东西.
df1
id testing_time test_name
1 2017-03-12 05:19:58 Raising
2 2017-03-12 05:21:30 sleeping
3 2017-03-12 05:29:40 walking
4 2017-03-12 05:31:23 talking
5 2017-03-12 06:19:47 eating
6 2017-03-12 06:33:51 working
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个data frame在pyspark像下面。
df.show()
+-----------+------------+-------------+
|customer_id|product_name| country|
+-----------+------------+-------------+
| 12870946| null| Poland|
| 815518| MA401|United States|
| 3138420| WG111v2| UK|
| 3178864| WGR614v6|United States|
| 7456796| XE102|United States|
| 21893468| AGM731F|United States|
+-----------+------------+-------------+
Run Code Online (Sandbox Code Playgroud)
我有另一个数据框,如下所示
df1.show()
+-----------+------------+
|customer_id|product_name|
+-----------+------------+
| 12870946| GS748TS|
| 815518| MA402|
| 3138420| null|
| 3178864| WGR614v6|
| 7456796| XE102|
| 21893468| AGM731F|
| null| AE171|
+-----------+------------+
Run Code Online (Sandbox Code Playgroud)
现在我想fuller outer join在这些表上做一个并更新product_name列值,如下所示。
1) Overwrite the values in `df` using values in `df1` …Run Code Online (Sandbox Code Playgroud) 我使用 pandas 中的文本文件创建了一个数据框。
df = pd.read_table('inputfile.txt',names=['Line'])
Run Code Online (Sandbox Code Playgroud)
当我做df
Line
0 17/08/31 13:24:48 INFO spark.SparkContext: Run...
1 17/08/31 13:24:49 INFO spark.SecurityManager: ...
2 17/08/31 13:24:49 INFO spark.SecurityManager: ...
3 17/08/31 13:24:49 INFO spark.SecurityManager: ...
4 17/08/31 13:24:49 INFO util.Utils: Successfull...
5 17/08/31 13:24:49 INFO slf4j.Slf4jLogger: Slf4...
6 17/08/31 13:24:49 INFO Remoting: Starting remo...
7 17/08/31 13:24:50 INFO Remoting: Remoting star...
8 17/08/31 13:24:50 INFO Remoting: Remoting now ...
9 17/08/31 13:24:50 INFO util.Utils: Successfull...
Run Code Online (Sandbox Code Playgroud)
现在我想将此文件另存为csv
df.to_csv('outputfile')
Run Code Online (Sandbox Code Playgroud)
我得到的结果是这样的
0,17/08/31 13:24:48 INFO …Run Code Online (Sandbox Code Playgroud) 我有一个pandas数据框pyspark.我想将这个数据框创建/加载到hive表中.
pd_df = pandas data frame
id int64
TEST_TIME datetime64[ns]
status_time object
GROUP object
test_type object
dtype: object
id TEST_TIME status_time GROUP test_type
0 1 2017-03-12 02:19:51 Driver started
1 2 2017-03-12 02:19:53 2017-03-11 18:13:43.577 ALARM AL_PT2334_L
2 3 2017-03-12 02:19:53 2017-03-11 18:13:43.577 ALARM AL_Turb_CNet_Ch_A_Fault
3 4 2017-03-12 02:19:53 2017-03-11 18:13:43.577 ALARM AL_Encl_Fire_Sys_Trouble
4 5 2017-03-12 02:19:54 2017-03-11 18:13:44.611 STATUS ST_Engine_Turning_Mode
Run Code Online (Sandbox Code Playgroud)
现在我将pandas数据帧转换为火花数据帧,如下所示.
spark_df = sqlContext.createDataFrame(pd_df)
+---+-------------------+--------------------+------+--------------------+
| id| TEST_TIME| status_time| GROUP| test_type| …Run Code Online (Sandbox Code Playgroud) 我有一张桌子MySQL。在这个我有 columna 称为device和test_Id。
+-------+---------+
|test_id| device|
+-------+---------+
| test_1| Win PC|
| test_1| Xbox|
| test_2| Windows|
| test_3| Win PC|
+-------+---------+
Run Code Online (Sandbox Code Playgroud)
我想选择test_Id其中device的两个Win PC和Xbox。我做了如下
select test_id from table where device in ('Win PC', 'Xbox');
Run Code Online (Sandbox Code Playgroud)
我得到低于结果。
+----------+
| test_id |
+----------+
| test_1 |
| test_3 |
| test_1 |
+----------+
Run Code Online (Sandbox Code Playgroud)
但我希望结果像
+----------+
| test_id |
+----------+
| test_1 |
| test_1 |
+----------+
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?