New version
with open(f'output.csv', 'w') as f:
print(data, file=f)
Old version
with open(f'output.csv', 'w') as f:
f.write(data)
PySpark, BigData, SQL, Hive, AWS, Python, Unix/Linux, Shortcuts, Examples, Scripts, Perl
New version
with open(f'output.csv', 'w') as f:
print(data, file=f)
Old version
with open(f'output.csv', 'w') as f:
f.write(data)
vars = 'abc'
print(f 'Variable is : {vars}')
This is much better than 'Variable is : {}'.format(vars)
1. Stop mysql:
systemctl stop mysqld
2. Set the mySQL environment option
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
3. Start mysql usig the options you just set
systemctl start mysqld
4. Login as root
mysql -u root
5. Update the root user password with these mysql commands
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword') WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
for 5.7.6 and later, you should use
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
mysql> quit
6. Stop mysql
systemctl stop mysqld
7. Unset the mySQL envitroment option so it starts normally next time
systemctl unset-environment MYSQLD_OPTS
8. Start mysql normally:
systemctl start mysqld
Try to login using your new password:
7. mysql -u root -p
Python Array Vs List
| List | Array |
| Heterigenous elements E.g, [1, 2, [3, 4], 5, 6] | Homogenous elements numbers = array.array('i', [1, 2, 3]) Explicitly define type of elements while defining (i - means integers |
| Use lot more space | Use less spcace compared lists |
| List contains pointers to different objects | Like C language arrays, with a pointer pointing to first element & rest are allocated in continuous memory |
| More flexible keeping different structures of data | Less flexible |
| Less efficient in storing & manipulating | More efficient in storing & manipulating |
| Used when your collection grow & shrink in time efficient manner & manage lot of data types in a list | Used when you perform lot of computationally intensive math operations |
| Numpy arrays are more suited for mathematical operations |
result_dict = {
1: {'site': u'test1.com', 'site_name': u'test1', 'is_https': True},
2: {'site': u'test2.com', 'site_name': u'test2', 'is_https': False}
}
print('-' * 30)
print(result_dict)
print('-' * 30)
https_list = dict(filter(lambda x: x if x[1]['is_https'] else None, result_dict.items()))
non_https_list = dict(filter(lambda x: x if not x[1]['is_https'] else None, result_dict.items()))
print(https_list)
print('-' * 30)
print(non_https_list)Output:
------------------------------
{1: {'site_name': u'test1', 'site': u'test1.com', 'is_https': True}, 2: {'site_name': u'test2', 'site': u'test2.com', 'is_https': False}}
------------------------------
{1: {'site_name': u'test1', 'site': u'test1.com', 'is_https': True}}
------------------------------
{2: {'site_name': u'test2', 'site': u'test2.com', 'is_https': False}}
Kinesis Kafka Messaging system Messaging system Stream/Shard Topic/Partition Proprietary Open Source No operational overload Heavy operational overload Stores upto 7 days (default 1 day) Can store data indefinitely Kinesis Client Library Various Kafka clients Log compaction Kinesis SQS Messaging system Messaging system AWS AWS No operational overload No operational overload State tracking by client State tracking by SQS Message can be read many times Processed message is deleted Unified log/stream processing Balancing tasks among workers
| Python 2 | Python 3 |
| input() may store as int, string raw_input() stores str always | input() function was fixed in Python 3 so that it always stores the user inputs as str |
| print "Hi" print("Hi") | print("Hi") |
| 3/2 ==> floor(1.5) => 1 (defaults to floor), return int | 3/2 ==> 1.5 |
| Strings default stores as Ascii | Strings default stores as unicode Unicode is a superset of ASCII and hence, can encode more characters including foreign ones. |
| sorted(employees.items(), key=lambda(x,y): y['age']) | sorted(employees.items(), key=lambda x: x[1]['age']) |
| AsyncIO | |
| Fstrings | |
| It is recommended to use __future__ imports it if you are planning Python 3.x support for your code | |
| xrange() - Lazy evaluation | range() - Lazy evaluation |
| except NameError, err: | except NameError as err: |
| my_generator = (letter for letter in 'abcdefg') next(my_generator) my_generator.next() | my_generator = (letter for letter in 'abcdefg') next(my_generator) |
| print 'Python', python_version() i = 1 print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 2.7.6 before: i = 1 comprehension: [0, 1, 2, 3, 4] after: i = 4 | Python 3.x for-loop variables don’t leak into the global namespace anymore! print ('Python', python_version()) i = 1 print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 3.4.1 before: i = 1 comprehension: [0, 1, 2, 3, 4] after: i = 1 |
| print range(3) print type(range(3)) [0, 1, 2] <type 'list'> | print range(3) print type(range(3)) print(list(range(3))) range(0, 3) <class 'range'> [0, 1, 2] |
| round(15.5) # 16.0 round(16.5) # 17.0 | Bankers rounding round(15.5) # 16 round(16.5) # 16 |