小编Use*_*345的帖子

sql查询中的python列表作为参数

我有一个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 sql

106
推荐指数
8
解决办法
9万
查看次数

Python/pyspark数据框重新排列列

我在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)

为什么会出现此错误.我怎样才能纠正这个问题.

python pyspark spark-dataframe

23
推荐指数
2
解决办法
2万
查看次数

具有复杂条件的Spark SQL窗口函数

这可能是最容易通过示例解释的.假设我有一个用户登录网站的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日期会是这样,如果tmpnull(即,如果它是第一次登录),或者如果login_date - tmp >= 5再 …

sql window-functions apache-spark apache-spark-sql pyspark

22
推荐指数
2
解决办法
2万
查看次数

如何在python数据帧中查找列的最大值

我有一个数据框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的回答中,链接给出了正确的答案

python dataframe pyspark

9
推荐指数
1
解决办法
2万
查看次数

在PySpark DataFrame中动态重命名多个列

我在pyspark中有一个有15列的数据框.

列名是id,name,emp.dno,emp.sal,state,emp.city,zip.....

现在我想,以取代有列名'.'在他们'_'

'emp.dno''emp_dno'

我想动态地做

我如何在pyspark实现这一目标?

special-characters dataframe apache-spark pyspark

8
推荐指数
2
解决办法
1万
查看次数

在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)

我怎样才能做到这一点?

python pyspark

6
推荐指数
2
解决办法
6412
查看次数

根据 pyspark 条件使用其他列值覆盖列值

我有一个data framepyspark像下面。

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)

apache-spark pyspark

6
推荐指数
1
解决办法
1282
查看次数

将数据框保存为 pandas 中的 csv/文本文件,无需行编号

我使用 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)

python pandas

5
推荐指数
2
解决办法
5305
查看次数

用于激活数据帧的Pandas将datetime数据类型转换为bigint

我有一个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)

pandas apache-spark pyspark

5
推荐指数
1
解决办法
2899
查看次数

Mysql 选择查询,其中列有两个值

我有一张桌子MySQL。在这个我有 columna 称为devicetest_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 PCXbox。我做了如下

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)

我怎样才能做到这一点?

mysql

5
推荐指数
1
解决办法
635
查看次数